Initial Commit

This commit is contained in:
DazedAnon 2026-07-08 11:56:00 -05:00
commit 8998dd946b
173 changed files with 361405 additions and 0 deletions

51
.gitignore vendored Normal file
View file

@ -0,0 +1,51 @@
# Ignore all files
*.*
# File Types
!*.mps
!*.json
!*.txt
!*.project
!*.js
!*.7z
!*.csv
!*.ain
!*.fnl
!*.ks
!*.tjs
!*.yaml
!*.rb
!*.rvdata2
# Other Needed Files
!.gitignore
!README.md
!patch-config.txt
!GameUpdate*
!patch*
!Game.dat
!bsxx.dat*
!game.ini
!package.nw
!SRPG_Unpacker.exe
!(SRPG_Unpacker Patcher).bat
!Data/BasicData/CommonEvent.dat
!Data/BasicData/DataBase.dat
!Data/BasicData/CDataBase.dat
!Data/BasicData/SysDatabase.dat
# WolfDawn pristine originals kept locally for re-injection (never shipped)
wolf_json/originals/
# Ignore
previous_patch_sha.txt
kabe3_save.dat
kabe3_system.dat
psbpack.dat
Save*
cg.dat
scene.dat
BSXScript_*
# Images

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Data/BasicData/DataBase.dat Normal file

Binary file not shown.

Binary file not shown.

BIN
Data/BasicData/Game.dat Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Data/MapData/Dungeon.mps Normal file

Binary file not shown.

BIN
Data/MapData/ED_mon.mps Normal file

Binary file not shown.

BIN
Data/MapData/ED_studio.mps Normal file

Binary file not shown.

BIN
Data/MapData/ED_tika.mps Normal file

Binary file not shown.

BIN
Data/MapData/ED_yasiki.mps Normal file

Binary file not shown.

BIN
Data/MapData/Map004.mps Normal file

Binary file not shown.

BIN
Data/MapData/Map006.mps Normal file

Binary file not shown.

BIN
Data/MapData/OP.mps Normal file

Binary file not shown.

Binary file not shown.

BIN
Data/MapData/OP_suramu.mps Normal file

Binary file not shown.

BIN
Data/MapData/SampleMapA.mps Normal file

Binary file not shown.

BIN
Data/MapData/SampleMapB.mps Normal file

Binary file not shown.

BIN
Data/MapData/TitleMap.mps Normal file

Binary file not shown.

BIN
Data/MapData/blank.mps Normal file

Binary file not shown.

BIN
Data/MapData/bokujyou.mps Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Data/MapData/cafe.mps Normal file

Binary file not shown.

BIN
Data/MapData/doukutu_A.mps Normal file

Binary file not shown.

BIN
Data/MapData/doukutu_B.mps Normal file

Binary file not shown.

Binary file not shown.

BIN
Data/MapData/heimin_1.mps Normal file

Binary file not shown.

Binary file not shown.

BIN
Data/MapData/heimin_2.mps Normal file

Binary file not shown.

Binary file not shown.

BIN
Data/MapData/house_rose.mps Normal file

Binary file not shown.

Binary file not shown.

BIN
Data/MapData/huyuusou.mps Normal file

Binary file not shown.

Binary file not shown.

BIN
Data/MapData/inkya.mps Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Data/MapData/kanrakugai.mps Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Data/MapData/massage.mps Normal file

Binary file not shown.

BIN
Data/MapData/mori.mps Normal file

Binary file not shown.

BIN
Data/MapData/mori_ev.mps Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Data/MapData/oukyuu.mps Normal file

Binary file not shown.

BIN
Data/MapData/park.mps Normal file

Binary file not shown.

BIN
Data/MapData/park_ev.mps Normal file

Binary file not shown.

BIN
Data/MapData/rojiura.mps Normal file

Binary file not shown.

BIN
Data/MapData/rojiura_ev.mps Normal file

Binary file not shown.

BIN
Data/MapData/sakaba.mps Normal file

Binary file not shown.

BIN
Data/MapData/sakaba_2.mps Normal file

Binary file not shown.

BIN
Data/MapData/sakaba_vip.mps Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Data/MapData/studio.mps Normal file

Binary file not shown.

BIN
Data/MapData/studio_ev.mps Normal file

Binary file not shown.

BIN
Data/MapData/suramu.mps Normal file

Binary file not shown.

BIN
Data/MapData/suramu_ev.mps Normal file

Binary file not shown.

BIN
Data/MapData/syoukan.mps Normal file

Binary file not shown.

BIN
Data/MapData/syoukan_ev.mps Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Data/MapData/taikenban.mps Normal file

Binary file not shown.

BIN
Data/MapData/test00.mps Normal file

Binary file not shown.

BIN
Data/MapData/testmap.mps Normal file

Binary file not shown.

BIN
Data/MapData/toire.mps Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

69
GameUpdate.bat Normal file
View file

@ -0,0 +1,69 @@
@echo off
setlocal EnableExtensions EnableDelayedExpansion
REM When deployed on a game: this file sits in the game root; patch scripts live in .\gameupdate\
REM In this repo the same layout is kept for neatness: this bat is under DazedMTLTool\gameupdate\ next to a nested gameupdate\ folder with patch.ps1.
set "GU_ROOT=%~dp0"
REM Game root is this batch file's folder (not %%CD%%, so full-path launches still work).
set "GAME_ROOT=!GU_ROOT!"
if "!GAME_ROOT:~-1!"=="\" set "GAME_ROOT=!GAME_ROOT:~0,-1!"
set "PATCH_SCRIPT_DIR=!GU_ROOT!gameupdate"
if not exist "!PATCH_SCRIPT_DIR!\patch.ps1" (
echo ERROR: patch.ps1 not found at:
echo !PATCH_SCRIPT_DIR!\patch.ps1
echo Expected layout: GameUpdate.bat and a gameupdate folder next to each other ^(same parent^).
pause
exit /b 1
)
REM Copy patch.ps1 so the live script can be overwritten during updates
copy /Y "!PATCH_SCRIPT_DIR!\patch.ps1" "!PATCH_SCRIPT_DIR!\patch2.ps1" >nul
if errorlevel 1 (
echo ERROR: Could not copy patch.ps1 to patch2.ps1 in:
echo !PATCH_SCRIPT_DIR!
pause
exit /b 1
)
set "_my_shell=pwsh"
where /q !_my_shell!
if !errorlevel! neq 0 (
echo PowerShell 7 ^(pwsh^) not found.
if /I "%GAMEUPDATE_PROMPT_PWSH%"=="1" (
echo.
set /p "INSTALL_PWSH=PowerShell 7 is faster. Install now via winget? (Y/N): "
if /I "!INSTALL_PWSH!"=="Y" (
echo Installing PowerShell 7 via winget...
winget install --id Microsoft.PowerShell --source winget --accept-package-agreements --accept-source-agreements
where /q pwsh
if !errorlevel! equ 0 (
set "_my_shell=pwsh"
echo PowerShell 7 installed; using pwsh.
) else (
echo Install failed or unavailable; falling back to powershell.
set "_my_shell=powershell"
)
) else (
echo Skipping install; falling back to powershell.
set "_my_shell=powershell"
)
) else (
echo Tip: Set GAMEUPDATE_PROMPT_PWSH=1 to offer PowerShell 7 install.
echo Falling back to powershell...
set "_my_shell=powershell"
)
where /q !_my_shell!
if !errorlevel! neq 0 (
echo ERROR: Neither pwsh nor powershell was found.
del /Q "!PATCH_SCRIPT_DIR!\patch2.ps1" >nul 2>&1
pause
exit /b 1
)
)
!_my_shell! -NoProfile -ExecutionPolicy Bypass -File "!PATCH_SCRIPT_DIR!\patch2.ps1" -GameRoot "!GAME_ROOT!"
set "GU_PATCH_EXIT=!errorlevel!"
del /Q "!PATCH_SCRIPT_DIR!\patch2.ps1" >nul 2>&1
exit /b !GU_PATCH_EXIT!

14
GameUpdate_linux.sh Executable file
View file

@ -0,0 +1,14 @@
#!/bin/bash
# Enable error handling
set -e
# Same layout as GameUpdate.bat: patch assets live under ./gameupdate/ next to this file.
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
GAME_ROOT="$SCRIPT_DIR"
PATCH_DIR="$SCRIPT_DIR/gameupdate"
cd "$GAME_ROOT"
cp "$PATCH_DIR/patch.sh" "$PATCH_DIR/patch2.sh"
bash "$PATCH_DIR/patch2.sh"
rm "$PATCH_DIR/patch2.sh"

92
LICENSE_OFL.txt Normal file
View file

@ -0,0 +1,92 @@
This Font Software is licensed under the SIL Open Font License,
Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font
creation efforts of academic and linguistic communities, and to
provide a free and open framework in which fonts may be shared and
improved in partnership with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply to
any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software
components as distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to,
deleting, or substituting -- in part or in whole -- any of the
components of the Original Version, by changing formats or by porting
the Font Software to a new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed,
modify, redistribute, and sell modified and unmodified copies of the
Font Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components, in
Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the
corresponding Copyright Holder. This restriction only applies to the
primary font name as presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created using
the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

114
README.md Normal file
View file

@ -0,0 +1,114 @@
# Apply Patch
1. Click Code
2. Click Download ZIP
3. Extract to game folder and Replace All.
## Future Patching
1. Run **`GameUpdate.bat`** to auto patch (Windows).
### Folder layout
**In this translation-tool repo:** Patch payloads stay tidy inside **`gameupdate/gameupdate/`** (`patch.ps1`, `patch-config.txt`, etc.). **`GameUpdate.bat`** and **`GameUpdate_linux.sh`** sit one level up, under **`gameupdate/`**.
**On an installed game (what gets copied over):** Put **`GameUpdate.bat`** in the **game root**, next to the game exe. Put **`patch.ps1`** and friends inside **`gameupdate\`** under that same root (mirror names—still **`gameupdate\`**). **`GameUpdate.bat`** finds **`gameupdate\patch.ps1`** from its own folder, so **`GameRoot`** is correct even if the console cwd is somewhere else.
**Copy checklist:** From **`DazedMTLTool/gameupdate/`**, copy **`GameUpdate.bat`** to `<game>\`; copy everything inside **`gameupdate/gameupdate/`** into `<game>\gameupdate\`.
2. Optional: set `GAMEUPDATE_PROMPT_PWSH=1` before running `GameUpdate.bat` if you want users to be prompted to install PowerShell 7 via winget.
3. Optional: set `GAMEUPDATE_DL_ATTEMPTS` (default `2`) to control retries for API checks/downloads. Lower values fail faster; higher values tolerate flaky networks.
# Troubleshooting
**GAMEUPDATE.bat doesn't update and closes immediately**
1. Make sure your path doesn't contain any Japanese characters or lots of whitespace.
2. Make sure you actually have permissions in the folder
3. Auto-update calls GitLabs public HTTP API (`/api/v4/...`), not the web “Download ZIP” URL—no account or token is required for public patch repos.
For WOLF RPG games, if you downloaded the game off of DLSite, you will need to do some extra steps to patch it. This is because there is a "master" file called Data.wolf that will take priority over the english patch files. You will need this file to be a folder before patching will work.
# Wolf Games
1) Download the latest UberWolf.exe release from the following link:
https://github.com/Sinflower/UberWolf/releases
2) Drag Data.wolf onto UberWolf.exe. This will create a new folder called data.wolf~
3) Rename the new data.wolf~ folder to Data
4) Delete the Data.wolf file
5) Delete previous_patch_sha.txt (this will exist if you ran GameUpdate.bat previously)
6) Run GameUpdate.bat
# Edit/Contribute
TLDR 3 steps.
Fork the repository.
Make the changes.
Submit a merge request.
If everything looks good and doesn't break things I'll merge it in.
Longer Version:
# Required Software:
* [VSCode](https://code.visualstudio.com/) Make sure you check all the boxes for context menus.
* [Git](https://git-scm.com/downloads) (Use the default for everything. Just keep clicking Next)
# Guide to contributing
### 1. Fork the Repository
- Go to the repository you want to fork.
- Click the "Fork" button.
### 2. Clone Your Fork
- Clone your forked repository to your local machine.
```sh
git clone https://gitgud.io/YOUR_USERNAME/REPO_NAME.git
```
### 3. Make Your Changes (In VSCode)
- Edit the files locally on your new branch using VSCode.
- Add and commit your changes.
```sh
git add .
git commit -m "Description of your changes"
```
### 4. Push Your Changes
- Push your changes to your fork on GitGud.io.
```sh
git push origin your-feature-branch
```
### 5. Create a Merge Request
- Go to your fork on GitGud.io.
- Click on "Merge Requests" in the sidebar.
- Click the "New merge request" button.
- Select the branch you made changes to and the target project (the original repo).
- Provide a title and description for your merge request and submit it.
---
## Example
Assuming you want to fork a repository named `example-project`:
### 1. Fork the Repo
- Navigate to `https://gitgud.io/original_user/example-project` and click "Fork".
### 2. Clone Your Fork
```sh
git clone https://gitgud.io/YOUR_USERNAME/example-project.git
```
### 3. Make Changes and Commit
```sh
# Make changes to the files
git add .
git commit -m "Add new feature to example project"
```
### 4. Push Changes
```sh
git push origin add-new-feature
```
### 5. Create a Merge Request
- Go to `https://gitgud.io/YOUR_USERNAME/example-project/merge_requests` and click on "New merge request"
- Choose the source branch `add-new-feature` and target branch (default: `main` or `master`)
- Fill in the details and submit the merge request

View file

@ -0,0 +1,3 @@
username=dazed-translations
repo=magical-girls-runa-and-nanami
branch=main

769
gameupdate/patch.ps1 Normal file
View file

@ -0,0 +1,769 @@
#Requires -Version 5.1
param(
[Parameter(Mandatory = $false)]
[string]$GameRoot
)
$ErrorActionPreference = 'Stop'
if (-not $PSBoundParameters.ContainsKey('GameRoot') -or [string]::IsNullOrWhiteSpace($GameRoot)) {
$GameRoot = (Get-Location).ProviderPath
}
else {
$GameRoot = (Resolve-Path -LiteralPath $GameRoot).ProviderPath
}
$PatchBundleRoot = $PSScriptRoot
function Wait-ConsolePause {
Write-Host ''
Write-Host 'Press any key to close this window...'
try {
$null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
}
catch {
Read-Host 'Press Enter to close'
}
}
function Get-DazedPatcherBannerGlyphs {
return @{
'A' = @(' ', ' AAA ', ' A A ', ' AAAAA ', ' A A ', ' A A ', ' ')
'C' = @(' ', ' CCCC ', ' C ', ' C ', ' C ', ' CCCC ', ' ')
'D' = @(' ', ' DDDDD ', ' D D ', ' D D ', ' D D ', ' DDDDD ', ' ')
'E' = @(' ', ' EEEEE ', ' E ', ' EEE ', ' E ', ' EEEEE ', ' ')
'H' = @(' ', ' H H ', ' H H ', ' HHHHH ', ' H H ', ' H H ', ' ')
'P' = @(' ', ' PPPPP ', ' P P ', ' PPPP ', ' P ', ' P ', ' ')
'R' = @(' ', ' RRRRR ', ' R R ', ' RRRR ', ' R R ', ' R R ', ' ')
'T' = @(' ', ' TTTTT ', ' T ', ' T ', ' T ', ' T ', ' ')
'Z' = @(' ', ' ZZZZZ ', ' Z ', ' Z ', ' Z ', ' ZZZZZ ', ' ')
}
}
function Build-AsciiWordLines {
param(
[Parameter(Mandatory = $true)][string]$Word,
[hashtable]$Glyphs
)
$letters = @(
$Word.ToUpperInvariant().ToCharArray() | ForEach-Object { [string]$_ }
)
$rows = New-Object string[] 7
for ($r = 0; $r -lt 7; $r++) {
$parts = New-Object System.Collections.Generic.List[string]
foreach ($letter in $letters) {
if (-not $Glyphs.ContainsKey($letter)) {
throw "Banner glyph missing for '$letter'."
}
$parts.Add($Glyphs[$letter][$r])
}
$rows[$r] = ($parts -join ' ')
}
return [string[]]$rows
}
function ConvertTo-LineStringArray {
param([AllowNull()][object]$Value)
if ($null -eq $Value) { return @() }
if ($Value -is [string[]]) { return $Value }
if ($Value -is [System.Collections.Generic.List[string]]) { return $Value.ToArray() }
if ($Value -is [string]) {
if ([string]::IsNullOrWhiteSpace([string]$Value)) { return @() }
return ,[string]$Value
}
return [string[]](@($Value) | ForEach-Object { if ($null -eq $_) { '' } else { "$_" } })
}
function Pad-LineBlockToHeight {
param(
[Parameter(Mandatory = $true, Position = 0)][object]$Rows,
[Parameter(Mandatory = $true, Position = 1)][int]$TargetHeight
)
[string[]]$lines = ConvertTo-LineStringArray -Value $Rows
if ($lines.Count -eq 0 -and $TargetHeight -gt 0) {
$blank = New-Object string[] $TargetHeight
for ($i = 0; $i -lt $TargetHeight; $i++) { $blank[$i] = '' }
return $blank
}
if ($lines.Count -ge $TargetHeight) {
return [string[]]$lines
}
$padTotal = $TargetHeight - $lines.Count
$padTop = [int][Math]::Floor($padTotal / 2)
$padBot = $padTotal - $padTop
$top = @()
for ($i = 0; $i -lt $padTop; $i++) { $top += '' }
$bot = @()
for ($i = 0; $i -lt $padBot; $i++) { $bot += '' }
return [string[]]($top + $lines + $bot)
}
function Get-EmbeddedIconAsciiCatLines {
# Refresh via generate_icon_ascii.ps1 when assets/icon.png changes.
$raw = @'
# %#
%:.-@ #..=
#:.-*:.:# *..=*..-%
*=.:.+# %% @*-:::+#
*-# +...=# =-%
% #..==..:# %@
%..* -.:%%#=..=##*##%% %*=:...+
*:.=+.:= ..=%##%*:..::.....:=+:..-=*:.:
*=:--.=* ..=%###%########*+=:.-+#%%%:.-
-:% #..=%###%%%%%###%%%%%#%%%#%*..+
%..=%##-.=*=-*%#####%%%%%#%#:.:
+.:###%+....:*%###:.=*=-*%%-..%
-.:%#%+..:..=%####=....-#%%+..%
*..*%##**%*-=###%=..:..=%#%*..#
=..*%%%%#%%%#####*#%*-+%%%-..
+..-*#%%%%######%%#%%%%*:..#
%+...-+*##%%%%%%%%#*+-..=%
%..:.....::---::....:*%
:.:%%#*+=--::::-=+:.:*
%..+%#%%%%%%%%%%%%%%+..-@ #-:::+@
#..+%###############%#:.:% #..=*:..#
..=%################%#:..% %..+%%-..@
%..:%###%#%##%%#%#####%#:.- *..*%*..+
#....*%##-.+%%#:.+%##%#%%*..* :.-%%:.-
%..=..-%#%:..#%+..+%#%+::#%:.- :.-%%:.-
-.:%=..*%%*..+%:.:%#%#..:#%=.. #..+%*..+
..=%#..:%%#..-#..=%#%-..*%%=..*:.-%%-..@
-.-%%+..+%%-.:+..+%%+..+%#%-....=%%-..#
+..*%*..:%%=..=..*%%:..*%%#...=#%+:.:#
..-**..:+**=..:..+**+:..**+..=*=:..+
+..............................:=#
%%%%%%%%%%%%%%%%%%%%%%%%%%%%@
'@
return [string[]]@($raw -split '\r?\n')
}
function Write-AsciiHeader {
try {
Write-Host ''
$glyphs = Get-DazedPatcherBannerGlyphs
$wordDazed = Build-AsciiWordLines -Word 'Dazed' -Glyphs $glyphs
$wordPatcher = Build-AsciiWordLines -Word 'Patcher' -Glyphs $glyphs
$titleCore = [System.Collections.Generic.List[string]]::new()
foreach ($ln in $wordDazed) { $titleCore.Add($ln) }
[void]$titleCore.Add('')
foreach ($ln in $wordPatcher) { $titleCore.Add($ln) }
$titleRows = $titleCore.ToArray()
$catLines = @(Get-EmbeddedIconAsciiCatLines)
$targetH = [Math]::Max($titleRows.Count, $catLines.Count)
$titlePadded = Pad-LineBlockToHeight -Rows $titleRows -TargetHeight $targetH
$catPadded = Pad-LineBlockToHeight -Rows $catLines -TargetHeight $targetH
$titleWidth = 0
foreach ($ln in $titlePadded) {
$safe = if ($null -eq $ln) { '' } else { $ln }
if ($safe.Length -gt $titleWidth) { $titleWidth = $safe.Length }
}
$gap = ' '
for ($i = 0; $i -lt $targetH; $i++) {
$ti = if ($null -eq $titlePadded[$i]) { '' } else { $titlePadded[$i] }
$ci = if ($catPadded.Length -le $i -or $null -eq $catPadded[$i]) { '' } else { $catPadded[$i] }
$left = if ($titleWidth -gt 0) { $ti.PadRight($titleWidth) } else { '' }
Write-Host ($left + $gap + $ci)
}
Write-Host ''
}
catch {
Write-Host ('[Banner skipped] ' + $_.Exception.Message)
}
}
function Write-BannerWrongFolder {
Write-Host ''
Write-Host '========================================'
Write-Host 'ERROR: Wrong game root folder!'
Write-Host '========================================'
Write-Host ''
Write-Host 'Game root cannot be the gameupdate folder itself.'
Write-Host 'Run GameUpdate.bat from the game root (same folder as GameUpdate.bat).'
Write-Host '========================================'
Write-Host ''
}
function Test-WrongWorkingDirectory {
param([string]$Root)
return ($Root -and ((Split-Path -Leaf $Root) -ieq 'gameupdate'))
}
function Read-PatchConfig {
param([string]$ConfigPath)
$cfg = @{ username = ''; repo = ''; branch = '' }
if (-not (Test-Path -LiteralPath $ConfigPath)) {
return $cfg
}
foreach ($rawLine in Get-Content -LiteralPath $ConfigPath) {
$line = $rawLine.Trim()
if (-not $line -or $line.StartsWith('#')) { continue }
$eq = $line.IndexOf('=')
if ($eq -lt 1) { continue }
$k = $line.Substring(0, $eq).Trim().ToLowerInvariant()
$v = if ($eq -lt $line.Length - 1) { $line.Substring($eq + 1).Trim() } else { '' }
switch ($k) {
'username' { $cfg.username = $v }
'repo' { $cfg.repo = $v }
'branch' { $cfg.branch = $v }
}
}
return $cfg
}
function Invoke-SrpgUnpacker {
param(
[Parameter(Mandatory = $true)][string]$ExePath,
[Parameter(Mandatory = $true)][string]$WorkingDirectory,
[Parameter(Mandatory = $true)][string[]]$Arguments
)
Push-Location -LiteralPath $WorkingDirectory
try {
& $ExePath @Arguments
return $LASTEXITCODE
}
finally {
Pop-Location
}
}
function Invoke-SrpgPreSetup {
param([string]$Root)
$unpacker = Join-Path $Root 'SRPG_Unpacker.exe'
$dts = Join-Path $Root 'data.dts'
$dataDir = Join-Path $Root 'data'
$projectDat = Join-Path $dataDir 'project.dat'
$patchDir = Join-Path $Root 'patch'
if (-not (Test-Path -LiteralPath $dts)) {
return
}
if (-not (Test-Path -LiteralPath $unpacker)) {
Write-Host '[Pre-Setup] SRPG_Unpacker.exe not found; skipping data setup.'
return
}
$shouldUnpack =
-not (Test-Path -LiteralPath $dataDir) -or
-not (Test-Path -LiteralPath $projectDat)
$runUnpackBlock = {
if (Test-Path -LiteralPath $dts) {
Write-Host '[Pre-Setup] Unpacking data.dts to data\'
$code = Invoke-SrpgUnpacker -ExePath $unpacker -WorkingDirectory $Root -Arguments @('-o', 'data', 'data.dts')
if ($code -ne 0) {
Write-Host '[Pre-Setup] ERROR: Unpack failed. Continuing.'
}
}
else {
Write-Host '[Pre-Setup] Skipping unpack: data.dts missing.'
}
if (-not (Test-Path -LiteralPath $patchDir)) {
if (Test-Path -LiteralPath $projectDat) {
Write-Host '[Pre-Setup] Creating patch folder from data\project.dat'
$code = Invoke-SrpgUnpacker -ExePath $unpacker -WorkingDirectory $Root -Arguments @('.\data\project.dat', '-c')
if ($code -ne 0) {
Write-Host '[Pre-Setup] ERROR: Create Patch failed. Continuing.'
}
}
else {
Write-Host '[Pre-Setup] Skipping create patch: data\project.dat not found.'
}
}
}
if ($shouldUnpack) {
& $runUnpackBlock
}
else {
if (-not (Test-Path -LiteralPath $patchDir)) {
if (Test-Path -LiteralPath $projectDat) {
Write-Host '[Pre-Setup] Creating patch folder from data\project.dat'
$code = Invoke-SrpgUnpacker -ExePath $unpacker -WorkingDirectory $Root -Arguments @('.\data\project.dat', '-c')
if ($code -ne 0) {
Write-Host '[Pre-Setup] ERROR: Create Patch failed. Continuing.'
}
}
else {
Write-Host '[Pre-Setup] Skipping create patch: data\project.dat not found.'
}
}
}
}
function Get-EnvInt {
param(
[Parameter(Mandatory = $true)][string]$Name,
[Parameter(Mandatory = $true)][int]$Default
)
$raw = [Environment]::GetEnvironmentVariable($Name)
if ([string]::IsNullOrWhiteSpace($raw)) { return $Default }
$parsed = 0
if ([int]::TryParse([string]$raw, [ref]$parsed) -and $parsed -gt 0) { return $parsed }
return $Default
}
function Invoke-WithRetry {
param(
[Parameter(Mandatory = $true)][scriptblock]$Action,
[Parameter(Mandatory = $true)][string]$Name,
[int]$Attempts = 2,
[int]$DelaySeconds = 2
)
$lastErr = $null
for ($i = 1; $i -le $Attempts; $i++) {
try {
return & $Action
}
catch {
$lastErr = $_
if ($i -lt $Attempts) {
Write-Host ("{0} failed ({1}/{2}), retrying..." -f $Name, $i, $Attempts)
Start-Sleep -Seconds $DelaySeconds
}
}
}
throw $lastErr
}
function Get-InvalidZipDownloadHint {
param([Parameter(Mandatory = $true)][string]$LiteralPath)
$item = Get-Item -LiteralPath $LiteralPath -ErrorAction SilentlyContinue
if (-not $item) {
return '(downloaded file missing)'
}
$len = $item.Length
$parts = [System.Collections.Generic.List[string]]::new()
$parts.Add("File size: $len bytes.")
if ($len -eq 0) {
$parts.Add('Empty file often means the window was closed during download, the connection dropped, or security software blocked the file. Run again and let it finish.')
return ($parts -join ' ')
}
$peekSize = [Math]::Min([int64]$len, 6144)
$buf = New-Object byte[] $peekSize
$fs = [System.IO.File]::OpenRead($LiteralPath)
try {
[void]$fs.Read($buf, 0, $peekSize)
}
finally {
$fs.Dispose()
}
$text = [System.Text.Encoding]::UTF8.GetString($buf)
if ($text -match '(?i)<!DOCTYPE\s+html|<html[\s>]') {
$parts.Add('Body looks like HTML (often an error page or block). Check username/repo/branch in patch-config.txt and network.')
}
elseif ($text.TrimStart().StartsWith('{')) {
try {
$j = ($text.TrimStart() | ConvertFrom-Json)
if ($j.message) {
$parts.Add("GitLab JSON: $($j.message)")
}
else {
$parts.Add('Body starts with JSON (likely an API error, not a ZIP).')
}
}
catch {
$parts.Add('Body starts with `{` but was not parseable JSON (truncated or wrong encoding).')
}
}
else {
$flat = ($text -replace '[\r\n]+', ' ')
$take = [Math]::Min(200, $flat.Length)
if ($take -gt 0) {
$parts.Add(('UTF-8 preview: ' + $flat.Substring(0, $take)))
}
}
return ($parts -join ' ')
}
$script:GameUpdateConsoleCloseHelperLoaded = $false
function Initialize-GameUpdateConsoleCloseHelper {
if ($script:GameUpdateConsoleCloseHelperLoaded) { return }
$script:GameUpdateConsoleCloseHelperLoaded = $true
$script:GameUpdateConsoleCloseHelperWorks = $false
if ($env:OS -ne 'Windows_NT') { return }
try {
Add-Type -TypeDefinition @'
using System;
using System.IO;
using System.Runtime.InteropServices;
namespace GameUpdate {
public static class ConsoleCloseHelper {
private static HandlerRoutine _handler;
public static void Register() {
_handler = Handle;
SetConsoleCtrlHandler(_handler, true);
}
public static void Unregister() {
if (_handler != null) {
SetConsoleCtrlHandler(_handler, false);
_handler = null;
}
}
private static bool Handle(uint ctrlType) {
const uint CTRL_CLOSE_EVENT = 2;
const uint CTRL_LOGOFF_EVENT = 5;
const uint CTRL_SHUTDOWN_EVENT = 6;
if (ctrlType != CTRL_CLOSE_EVENT && ctrlType != CTRL_LOGOFF_EVENT && ctrlType != CTRL_SHUTDOWN_EVENT) {
return false;
}
try {
string path = Environment.GetEnvironmentVariable("GAMEUPDATE_REPO_ZIP_PATH");
if (!string.IsNullOrEmpty(path) && File.Exists(path)) {
File.Delete(path);
}
}
catch { }
return false;
}
private delegate bool HandlerRoutine(uint ctrlType);
[DllImport("Kernel32.dll", SetLastError = true)]
private static extern bool SetConsoleCtrlHandler(HandlerRoutine handler, bool add);
}
}
'@ -ErrorAction Stop
$script:GameUpdateConsoleCloseHelperWorks = $true
}
catch {
$script:GameUpdateConsoleCloseHelperWorks = $false
}
}
function Invoke-PatchArchiveDownload {
param(
[Parameter(Mandatory = $true)][string]$Url,
[Parameter(Mandatory = $true)][string]$OutFile,
[Parameter(Mandatory = $true)][hashtable]$Headers
)
if (Test-Path -LiteralPath $OutFile) {
Remove-Item -LiteralPath $OutFile -Force
}
$outFull = [System.IO.Path]::GetFullPath($OutFile)
Initialize-GameUpdateConsoleCloseHelper
$prevPref = $ProgressPreference
$completed = $false
$registeredCloseHandler = $false
try {
if ($script:GameUpdateConsoleCloseHelperWorks) {
$env:GAMEUPDATE_REPO_ZIP_PATH = $outFull
[GameUpdate.ConsoleCloseHelper]::Register()
$registeredCloseHandler = $true
}
$ProgressPreference = 'Continue'
Invoke-WebRequest -Uri $Url -OutFile $OutFile -Headers $Headers -UseBasicParsing
$completed = $true
}
finally {
$ProgressPreference = $prevPref
if ($registeredCloseHandler) {
try {
[GameUpdate.ConsoleCloseHelper]::Unregister()
}
catch { }
Remove-Item env:GAMEUPDATE_REPO_ZIP_PATH -ErrorAction SilentlyContinue
}
if (-not $completed -and (Test-Path -LiteralPath $OutFile)) {
Remove-FileOrDirectoryViaCmd -LiteralPath $OutFile
}
}
}
function Remove-FileOrDirectoryViaCmd {
param([Parameter(Mandatory = $true)][string]$LiteralPath)
if (-not (Test-Path -LiteralPath $LiteralPath)) {
return
}
$full = (Resolve-Path -LiteralPath $LiteralPath).ProviderPath
$item = Get-Item -LiteralPath $LiteralPath
if ($item.PSIsContainer) {
cmd.exe /c "rd /s /q `"$full`"" | Out-Null
}
else {
cmd.exe /c "del /f /q `"$full`"" | Out-Null
}
}
function Remove-DownloadedRepoZip {
param([Parameter(Mandatory = $true)][string]$LiteralPath)
Remove-FileOrDirectoryViaCmd -LiteralPath $LiteralPath
}
function Invoke-PatchDownloadExtract {
param(
[Parameter(Mandatory = $true)][string]$Root,
[Parameter(Mandatory = $true)][string]$StateFilePath,
[Parameter(Mandatory = $true)][string]$Username,
[Parameter(Mandatory = $true)][string]$Repo,
[Parameter(Mandatory = $true)][string]$Branch
)
if ($PSVersionTable.PSEdition -ne 'Core') {
try {
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
}
catch {}
}
Set-Location -LiteralPath $Root
$id = [uri]::EscapeDataString($Username + '/' + $Repo)
$branchEnc = [uri]::EscapeDataString($Branch)
$headers = @{ 'User-Agent' = 'DazedMTL-Patcher-1.0' }
$dlAttempts = Get-EnvInt -Name 'GAMEUPDATE_DL_ATTEMPTS' -Default 2
$latestSha = Invoke-WithRetry -Name 'Resolve latest patch SHA' -Attempts $dlAttempts -Action {
(Invoke-RestMethod -Uri ("https://gitgud.io/api/v4/projects/$id/repository/branches/$branchEnc") -Headers $headers).commit.id
}
if (-not $latestSha) { throw 'PATCH_ERR:API:Latest commit SHA response was empty.' }
$latestSha = ([string]$latestSha).Trim()
$previousSha = ''
if (Test-Path -LiteralPath $StateFilePath) {
$previousSha = (Get-Content -LiteralPath $StateFilePath -Raw).Trim()
}
else {
Write-Host 'First run: comparing with remote...'
}
if ($previousSha -eq $latestSha) {
return 10
}
$zipPath = Join-Path $Root ('dazedmtl_patch_' + [Guid]::NewGuid().ToString('N') + '.zip')
Write-Host ('Downloading patch... ' + $zipPath)
$stage = Join-Path ([IO.Path]::GetTempPath()) ('gu_' + [Guid]::NewGuid().ToString('N'))
$archiveSha = [uri]::EscapeDataString($latestSha)
$archiveUrl = "https://gitgud.io/api/v4/projects/$id/repository/archive.zip?sha=$archiveSha"
$dlSw = [System.Diagnostics.Stopwatch]::StartNew()
Invoke-WithRetry -Name 'Download archive with Invoke-WebRequest' -Attempts $dlAttempts -Action {
Invoke-PatchArchiveDownload -Url $archiveUrl -OutFile $zipPath -Headers $headers
} | Out-Null
$dlSw.Stop()
$bytes = (Get-Item -LiteralPath $zipPath).Length
if ($bytes -eq 0) {
$hint = Get-InvalidZipDownloadHint -LiteralPath $zipPath
Remove-DownloadedRepoZip -LiteralPath $zipPath
throw "PATCH_ERR:ZIP:Download is empty (0 bytes). $hint"
}
$secs = [Math]::Max($dlSw.Elapsed.TotalSeconds, 0.001)
$mbps = ($bytes / 1MB) / $secs
Write-Host ("Download complete: {0:N1} MB in {1:N1}s ({2:N1} MB/s)" -f ($bytes / 1MB), $secs, $mbps)
$zipHeaderBad = $false
$zipHeaderHint = ''
$fs = [System.IO.File]::OpenRead($zipPath)
try {
$hdr = New-Object byte[] 4
if ($fs.Read($hdr, 0, 4) -lt 4 -or $hdr[0] -ne 0x50 -or $hdr[1] -ne 0x4B) {
$zipHeaderBad = $true
$zipHeaderHint = Get-InvalidZipDownloadHint -LiteralPath $zipPath
}
}
finally {
$fs.Dispose()
}
if ($zipHeaderBad) {
Remove-DownloadedRepoZip -LiteralPath $zipPath
throw "PATCH_ERR:ZIP:Download is not a valid ZIP (missing PK header). $zipHeaderHint"
}
if (Test-Path -LiteralPath $stage) {
Remove-FileOrDirectoryViaCmd -LiteralPath $stage
}
New-Item -ItemType Directory -Path $stage | Out-Null
try {
try {
Expand-Archive -LiteralPath $zipPath -DestinationPath $stage -Force
$dirs = @(Get-ChildItem -LiteralPath $stage -Directory)
if ($dirs.Count -ne 1) {
throw ('PATCH_ERR:ZIP:Expected one root folder in archive, found {0}.' -f $dirs.Count)
}
Copy-Item -Path (Join-Path $dirs[0].FullName '*') -Destination $PWD.Path -Recurse -Force
}
finally {
if (Test-Path -LiteralPath $zipPath) {
Remove-DownloadedRepoZip -LiteralPath $zipPath
}
}
}
finally {
if (Test-Path -LiteralPath $stage) {
Remove-FileOrDirectoryViaCmd -LiteralPath $stage
}
}
Set-Content -LiteralPath $StateFilePath -Value $latestSha -Encoding Ascii
return 0
}
function Invoke-SrpgPostApply {
param([string]$Root)
$unpacker = Join-Path $Root 'SRPG_Unpacker.exe'
$dts = Join-Path $Root 'data.dts'
$projectDat = Join-Path $Root 'data\project.dat'
$dataDir = Join-Path $Root 'data'
if (-not (Test-Path -LiteralPath $dts)) {
return
}
if (-not (Test-Path -LiteralPath $unpacker)) {
Write-Host 'SRPG_Unpacker.exe not found in root; skipping SRPG patch steps.'
return
}
if (Test-Path -LiteralPath $projectDat) {
Write-Host 'Applying patch to data\project.dat...'
$code = Invoke-SrpgUnpacker -ExePath $unpacker -WorkingDirectory $Root -Arguments @('.\data\project.dat', '-a')
if ($code -ne 0) {
Write-Host 'ERROR: Apply Patch failed.'
}
}
else {
Write-Host 'ERROR: data\project.dat not found; cannot apply patch.'
}
if (Test-Path -LiteralPath $dataDir) {
Write-Host 'Packing data folder to data.dts...'
$code = Invoke-SrpgUnpacker -ExePath $unpacker -WorkingDirectory $Root -Arguments @('-o', 'data.dts', 'data')
if ($code -ne 0) {
Write-Host 'WARNING: Pack failed.'
}
}
else {
Write-Host 'Step 4: Skipping pack - data folder not found.'
}
}
function Remove-StalePatchZipArtifactsInGameRoot {
param([Parameter(Mandatory = $true)][string]$Root)
if (-not (Test-Path -LiteralPath $Root)) { return }
Get-ChildItem -LiteralPath $Root -Filter 'dazedmtl_patch_*.zip' -File -ErrorAction SilentlyContinue |
ForEach-Object {
Remove-FileOrDirectoryViaCmd -LiteralPath $_.FullName
}
}
function Remove-PatchTempArtifacts {
param([string]$Root)
$zipPath = Join-Path $Root 'repo.zip'
$legacyTmp = Join-Path $Root '_patch_extract_tmp'
Remove-StalePatchZipArtifactsInGameRoot -Root $Root
if (Test-Path -LiteralPath $zipPath) {
Write-Host ' Removing repo.zip...'
Remove-FileOrDirectoryViaCmd -LiteralPath $zipPath
}
if (Test-Path -LiteralPath $legacyTmp) {
Write-Host ' Removing _patch_extract_tmp - using rd /s /q (avoids PowerShell hangs on huge folders).'
Remove-FileOrDirectoryViaCmd -LiteralPath $legacyTmp
}
}
try {
if (Test-WrongWorkingDirectory -Root $GameRoot) {
Write-BannerWrongFolder
Wait-ConsolePause
exit 1
}
Write-AsciiHeader
Remove-StalePatchZipArtifactsInGameRoot -Root $GameRoot
$configPath = Join-Path $PatchBundleRoot 'patch-config.txt'
if (-not (Test-Path -LiteralPath $configPath)) {
Write-Host 'patch-config.txt not found next to patch.ps1 - skipping patch.'
Wait-ConsolePause
exit 0
}
$cfg = Read-PatchConfig -ConfigPath $configPath
if ([string]::IsNullOrWhiteSpace($cfg.username)) {
Write-Host "ERROR: 'username=' is missing in patch-config.txt"
Wait-ConsolePause
exit 1
}
if ([string]::IsNullOrWhiteSpace($cfg.repo)) {
Write-Host "ERROR: 'repo=' is missing in patch-config.txt"
Wait-ConsolePause
exit 1
}
if ([string]::IsNullOrWhiteSpace($cfg.branch)) {
Write-Host "ERROR: 'branch=' is missing in patch-config.txt"
Wait-ConsolePause
exit 1
}
Write-Host ('Pulling patch from https://gitgud.io/{0}/{1} (branch: {2})' -f $cfg.username, $cfg.repo, $cfg.branch)
Invoke-SrpgPreSetup -Root $GameRoot
$stateFile = Join-Path $PatchBundleRoot 'previous_patch_sha.txt'
$patchDlExit = 1
try {
$patchDlExit = Invoke-PatchDownloadExtract -Root $GameRoot -StateFilePath $stateFile `
-Username $cfg.username -Repo $cfg.repo -Branch $cfg.branch
}
catch {
Write-Host ''
Write-Host $_.Exception.Message
if ($_.InvocationInfo.PositionMessage) { Write-Host $_.InvocationInfo.PositionMessage }
Remove-PatchTempArtifacts -Root $GameRoot
Wait-ConsolePause
exit 1
}
if ($patchDlExit -eq 10) {
Write-Host 'Already up to date.'
Wait-ConsolePause
exit 0
}
if ($patchDlExit -ne 0) {
Write-Host 'Download or extraction failed!'
Remove-PatchTempArtifacts -Root $GameRoot
Wait-ConsolePause
exit 1
}
Write-Host 'Applying patch...'
Invoke-SrpgPostApply -Root $GameRoot
Write-Host 'Cleaning up...'
Remove-PatchTempArtifacts -Root $GameRoot
Write-Host 'Done.'
Wait-ConsolePause
exit 0
}
catch {
Write-Host ''
Write-Host $_.Exception.Message
Wait-ConsolePause
exit 1
}

224
gameupdate/patch.sh Executable file
View file

@ -0,0 +1,224 @@
#!/bin/bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT_DIR="$(pwd)"
CONFIG_FILE="$SCRIPT_DIR/patch-config.txt"
STATE_FILE="$SCRIPT_DIR/previous_patch_sha.txt"
GITGUD_API="https://gitgud.io/api/v4"
API_HEADERS=( -H "User-Agent: GameUpdate/1.0" )
check_dependency() {
if ! command -v "$1" > /dev/null 2>&1; then
echo "Error: '$1' is not installed. Please install it using 'pkg install $1'."
exit 1
fi
}
# Check for jq, unzip, and curl
check_dependency jq
check_dependency unzip
check_dependency curl
# Check if CONFIG_FILE exists
if [ ! -f "$CONFIG_FILE" ]; then
echo "Config file '$CONFIG_FILE' not found! Assuming no patching needed."
exit 0
fi
# Convert line endings to Unix format
sed -i 's/\r$//' "$CONFIG_FILE"
# Debug information
echo "Root directory: $ROOT_DIR"
echo "Config file path: $CONFIG_FILE"
# Read configuration from file
# shellcheck disable=SC1090
. "$CONFIG_FILE"
if [ -z "${username:-}" ]; then
echo "ERROR: 'username=' is missing in gameupdate/patch-config.txt"
exit 1
fi
if [ -z "${repo:-}" ]; then
echo "ERROR: 'repo=' is missing in gameupdate/patch-config.txt"
exit 1
fi
if [ -z "${branch:-}" ]; then
echo "ERROR: 'branch=' is missing in gameupdate/patch-config.txt"
exit 1
fi
RETRIES="${GAMEUPDATE_DL_ATTEMPTS:-2}"
if ! [[ "$RETRIES" =~ ^[1-9][0-9]*$ ]]; then
RETRIES=2
fi
retry_cmd() {
local name="$1"
shift
local attempt=1
while true; do
if "$@"; then
return 0
fi
if [ "$attempt" -ge "$RETRIES" ]; then
echo "$name failed after $attempt attempt(s)."
return 1
fi
echo "$name failed ($attempt/$RETRIES), retrying..."
attempt=$((attempt + 1))
sleep 2
done
}
project_enc=$(jq -nr --arg ns "$username" --arg rp "$repo" '$ns + "/" + $rp | @uri')
branch_enc=$(jq -nr --arg b "$branch" '$b | @uri')
# Get the latest hash
echo "Getting latest commit SHA hash"
latest_patch_sha="$(
retry_cmd "Resolve latest patch SHA" \
curl -fsSL "${API_HEADERS[@]}" \
"${GITGUD_API}/projects/${project_enc}/repository/branches/${branch_enc}" \
| jq -r '.commit.id'
)"
latest_patch_sha="$(printf '%s' "$latest_patch_sha" | tr -d '[:space:]')"
if [ -z "$latest_patch_sha" ] || [ "$latest_patch_sha" = "null" ]; then
echo "PATCH_ERR:API:Latest commit SHA response was empty."
exit 1
fi
# --------------------------------------------------------
# PRE-SETUP: Ensure SRPG data and patch structure exists
# Run Steps 1 and 2 BEFORE pulling repo patch to avoid overwriting updates
# 1) Unpack once if data folder doesn't exist (and data.dts does)
# 2) Create Patch once if patch folder doesn't exist
# --------------------------------------------------------
UNPACKER="$ROOT_DIR/SRPG_Unpacker.exe"
if [ -f "$ROOT_DIR/data.dts" ]; then
if [ -f "$UNPACKER" ]; then
echo "[Pre-Setup] Running SRPG_Unpacker preparation steps..."
# Step 1: Unpack (once) — mirror patch.ps1: unpack if no data/ or no data/project.dat
if [ ! -d "$ROOT_DIR/data" ] || [ ! -f "$ROOT_DIR/data/project.dat" ]; then
if [ -f "$ROOT_DIR/data.dts" ]; then
echo "[Pre-Setup] Step 1: Unpacking data.dts -> data"
( cd "$ROOT_DIR" && "$UNPACKER" -o data data.dts ) || echo "[Pre-Setup] ERROR: Unpack failed."
else
echo "[Pre-Setup] Step 1: Skipping unpack (no data folder and no data.dts found)."
fi
else
echo "[Pre-Setup] Step 1: data folder exists; skipping unpack."
fi
# Step 2: Create Patch (once)
if [ ! -d "$ROOT_DIR/patch" ]; then
if [ -f "$ROOT_DIR/data/project.dat" ]; then
echo "[Pre-Setup] Step 2: Creating patch from data/project.dat"
( cd "$ROOT_DIR" && "$UNPACKER" ./data/project.dat -c ) || echo "[Pre-Setup] ERROR: Create Patch failed."
else
echo "[Pre-Setup] Step 2: Skipping create patch (data/project.dat not found)."
fi
else
echo "[Pre-Setup] Step 2: patch folder exists; skipping create."
fi
else
echo "[Pre-Setup] SRPG_Unpacker.exe not found in root; skipping pre-setup steps."
fi
fi
download_extract() {
echo "Downloading latest patch..."
archive_sha_enc=$(jq -nr --arg s "$latest_patch_sha" '$s | @uri')
if ! retry_cmd "Download archive with curl" \
curl -fSL --progress-bar "${API_HEADERS[@]}" \
"${GITGUD_API}/projects/${project_enc}/repository/archive.zip?sha=${archive_sha_enc}" \
-o "$ROOT_DIR/repo.zip"; then
echo "Download failed!"
rm -f "$ROOT_DIR/repo.zip"
return 1
fi
TMP_EX=$(mktemp -d)
echo "Extracting..."
if ! unzip -qo "$ROOT_DIR/repo.zip" -d "$TMP_EX"; then
echo "Extraction failed!"
rm -rf "$TMP_EX"
rm -f "$ROOT_DIR/repo.zip"
return 1
fi
inner=""
for d in "$TMP_EX"/*; do
if [ -d "$d" ]; then
inner="$d"
break
fi
done
if [ -z "$inner" ]; then
echo "Archive had no root folder!"
rm -rf "$TMP_EX"
rm -f "$ROOT_DIR/repo.zip"
return 1
fi
echo "Applying patch..."
if ! cp -r "$inner"/* "$ROOT_DIR/"; then
echo "Patch application failed!"
rm -rf "$TMP_EX"
rm -f "$ROOT_DIR/repo.zip"
return 1
fi
rm -rf "$TMP_EX"
echo "Cleaning up..."
rm -f "$ROOT_DIR/repo.zip"
# --------------------------------------------------------
# POST-APPLY: Run Steps 3 and 4 after patch files are merged
# --------------------------------------------------------
UNPACKER="$ROOT_DIR/SRPG_Unpacker.exe"
if [ -f "$ROOT_DIR/data.dts" ]; then
if [ -f "$UNPACKER" ]; then
echo "Running SRPG_Unpacker apply/pack steps..."
if [ -f "$ROOT_DIR/data/project.dat" ]; then
echo "Step 3: Applying patch to data/project.dat"
( cd "$ROOT_DIR" && "$UNPACKER" ./data/project.dat -a ) || echo "ERROR: Apply Patch failed."
else
echo "ERROR: data/project.dat not found; cannot apply patch."
fi
if [ -d "$ROOT_DIR/data" ]; then
echo "Step 4: Packing data -> data.dts"
( cd "$ROOT_DIR" && "$UNPACKER" -o data.dts data ) || echo "WARNING: Pack failed."
else
echo "Step 4: Skipping pack (data folder not found)."
fi
else
echo "SRPG_Unpacker.exe not found in root; skipping SRPG patch steps."
fi
fi
echo "$latest_patch_sha" > "$STATE_FILE"
}
# Check if previous_patch_sha.txt exists in gameupdate
if [ ! -f "$STATE_FILE" ]; then
echo "No saved patch version yet (first run); comparing with remote..."
download_extract
else
previous_patch_sha=$(tr -d '[:space:]' < "$STATE_FILE")
if [ "$latest_patch_sha" != "$previous_patch_sha" ]; then
echo "Update found! Patching..."
download_extract
else
echo "Already up to date (matches latest patch commit)."
fi
fi

65
gameupdate/vocab.txt Normal file
View file

@ -0,0 +1,65 @@
# Game Characters
エル (El) - Female; inn adventurer tied to the Light Plain plotline; not player-chosen; speaks casually and informally; energetic and direct
流浪の求道者 (Seeker) - Male; roaming challenge NPC; not player-chosen; speaks in a grave, formal register; stoic and trial-focused
シスターエキュリー (Sister Ecurie) - Female; church sister of the Amol faith; not player-chosen; polite religious register; gentle and dutiful
ホエミ (Hoemi) - Female; friend in the northern district; not player-chosen; casual friendly speech; warm and approachable
ロクサヌ (Roxanu) - Female; northern district student; not player-chosen; youthful casual speech; sociable and ordinary
ミント (Mint) - Female; northern district student; not player-chosen; youthful casual speech; lively and informal
ヒルデ (Hilde) - Female; apartment resident; not player-chosen; plain civilian speech; practical and grounded
管理人ナミサ (Manager Namisa) - Female; apartment manager; not player-chosen; polite caretaker speech; responsible and matter-of-fact
デフィ (Defi) - Female; soldier's wife living in the apartment; not player-chosen; domestic casual speech; reserved and ordinary
ラム (Ram) - Female; arena warrior; not player-chosen; confident fighter's speech; bold and competitive
アルシェ (Arche) - Female; arena fan; not player-chosen; enthusiastic casual speech; excitable and friendly
バーニア (Barnia) - Female; student associated with the arena; not player-chosen; youthful casual speech; curious and energetic
フォサ (Fossa) - Female; arena-side NPC; not player-chosen; casual town speech; socially active
キャナリ (Canari) - Female; cafe worker or cafe patron; not player-chosen; light casual speech; cheerful and sociable
エロン (Elon) - Male; cafe NPC; not player-chosen; casual adult speech; relaxed and conversational
チコニャ (Ciconya) - Female; cafe NPC; not player-chosen; casual service speech; friendly and talkative
ルートル (Rootle) - Male; cafe NPC; not player-chosen; casual adult speech; easygoing
シャモー (Chameau) - Male; cafe NPC; not player-chosen; casual adult speech; relaxed and ordinary
コション (Cochon) - Male; cafe NPC; not player-chosen; casual adult speech; informal and sociable
アレニエ (Areignee) - Female; trading-company NPC; not player-chosen; businesslike polite speech; composed and practical
ミルバト (Mirbat) - Male; trading-company NPC; not player-chosen; businesslike speech; practical and restrained
受付アンヌ (Receptionist Anne) - Female; theater receptionist; not player-chosen; polite service register; courteous and professional
支配人アドルフ (Manager Adolf) - Male; theater manager; not player-chosen; formal managerial speech; authoritative and composed
アンリ (Henri) - Male; theater-related named NPC; not player-chosen; polite stage-world speech; refined and reserved
カトリーヌ (Catherine) - Female; theater performer or staff member; not player-chosen; elegant feminine speech; theatrical and poised
シエル (Ciel) - Female; theater performer or staff member; not player-chosen; polite feminine speech; graceful and composed
グラティア (Gratia) - Female; theater NPC; not player-chosen; refined speech; elegant and expressive
オレイユ (Oreille) - Female; theater NPC; not player-chosen; refined speech; attentive and polished
実況 (Commentator) - Male; arena or event commentator; not player-chosen; energetic announcing register; loud and performative
ウミ (Umi) - Female; named NPC in Albol Forest; not player-chosen; casual rural speech; practical and outdoorsy
ネリネ (Nerine) - Female; named NPC at Albol Camp; not player-chosen; casual camp speech; warm and grounded
ジャスミン (Jasmine) - Female; named NPC at Albol Camp; not player-chosen; casual feminine speech; friendly and composed
アーディ (Ardi) - Male; named NPC in the Testa settlement; not player-chosen; casual local speech; practical and direct
クラレット (Claret) - Female; named NPC in Viola Village; not player-chosen; casual village speech; grounded and approachable
ステノ (Steno) - Female; hot spring inn NPC; not player-chosen; polite hospitality speech; calm and service-minded
# Worldbuilding Terms
淫催都市ヒュプノズム (Lewd Hypnosis City Hypnosm) - Game title and central city setting; a city shaped by the Incitation curse and its social control
ヒュプノズム (Hypnosm) - Main city and hub area; divided into districts such as the southern district, slums, upper district, church, guild, theater, and lord's manor
淫催 (Incitation) - The central hypnosis-like curse or state that alters obedience, desire, and social values throughout Hypnosm
淫催の呪い (Incitation Curse) - Story term for the magical influence affecting the city and its residents
淫催の守護者 (Guardian of Incitation) - Enemy or boss title connected to the Incitation system
アモル教 (Amol Faith) - City religion imposed on residents; tied to marriage, sexuality, and the social norms of Hypnosm
光の平原 (Light Plain) - Major plot location where magical power gathers and expands; associated with danger, monsters, and the Divine King's awakening
神王覚醒 (Divine King's Awakening) - Historical event said to have created or transformed the Light Plain around twenty years earlier
血胤 (Bloodline) - Ruby-tagged lore term read as Bloodseed; unique hereditary magic tied to absorbing traits from other beings
血胤魔術 (Bloodline Magic) - Keimi's unique magic system derived from the Bloodline lineage
ブラッドシード家 (Bloodseed Family) - Fallen noble family associated with Bloodline magic
フィガロ家 (Figaro Family) - Prestigious family famous for swords and magic swords
魔剣 (Magic Sword) - Lore term for special enchanted swords, especially those connected to the Figaro family
フィガロの魔剣 (Figaro Magic Sword) - Named magic sword from the Figaro family
魔剣活性化 (Magic Sword Activation) - Story process or quest concept for making a magic sword usable
冒険者ランク (Adventurer Rank) - Guild status system; raising it unlocks citizenship and marriage-related progression
住民権 (Citizenship) - Legal status required to access restricted districts and marry within Hypnosm
ギルド (Guild) - Adventurer organization that handles rank progression and quest reporting
マナ (Mana) - Recurring magical resource gained from exploration and used in city systems
マナ屋 (Mana Shop) - City facility or service related to exchanging mana
領主の館 (Lord's Manor) - Plot location tied to the city's ruler and later story investigation
地下道 (Underground Passage) - Story route used during the Hypnosm investigation arc
魔人の塔 (Demon Tower) - Major dungeon or travel destination referenced in progression data
氷結の迷宮 (Frozen Labyrinth) - Major dungeon or travel destination referenced in progression data
宵闇のエージェント (Agent of Twilight) - Named quest title with story significance
極寒のプレリュード (Frigid Prelude) - Named quest title with story significance
性奴隷 (Sex Slave) - In-universe class/status used by event progression and relationship systems

62
readme.txt Normal file
View file

@ -0,0 +1,62 @@
この度は『手折らる花へのトロイメライ』を購入して頂きありがとうございます。
以下にプレイするにあたっての注意等を書かせて頂きました。
特に免責事項・禁止事項は御一読お願いします。
 
■起動方法
 解凍後に作成されたフォルダ内の『game.exe』をクリックして起動して下さい。
■操作キー一覧
本作品は基本的にマウス操作のみでプレイします
左クリック 移動・決定・メッセージ送り
右クリック メニュー表示・キャンセル
中クリック バックログ・文字非表示(エッチシーンのみ)
Aキー 自動メッセージ送り(エッチシーンのみ)
左Ctrlキー メッセージスキップができます
■免責事項
 本ソフトの起動に伴う一切のトラブルには責任を負いかねます。
 それをご理解の上での起動をお願い致します。
■禁止事項
 当ソフトは成人指定です。18歳未満の方は遊ぶことができません。
 ソフトおよびデータの複製・再配布、
 素材の一部もしくは全ての流用を禁じます。
■使わせて頂いた素材と提供者様(敬称略)
画像等
●ぴぽや
https://pipoya.net/
BGM・SE等
●OtoLogic
https://otologic.jp/free/license.html
●MusMus
https://musmus.main.jp/info.html
提供者様にはこの場を借りて、感謝申し上げます。
■連絡先
作者Cien
https://ci-en.dlsite.com/creator/9555
ご質問、ご感想、バグ報告などお気軽にご連絡ください。
Copyright (C) 2026 +蟹 All Rights Reserved. 

File diff suppressed because it is too large Load diff

202242
wolf_json/CommonEvent.dat.json Normal file

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

163
wolf_json/Dungeon.mps.json Normal file
View file

@ -0,0 +1,163 @@
{
"file": "Dungeon.mps",
"kind": "map",
"scenes": [
{
"event": 1,
"page": 0,
"name": "回復人",
"lines": [
{
"cmd": 0,
"str": 0,
"speaker": "Narration",
"speaker_src": "narration",
"source": "「ここではコモンイベント15を利用して\n 【セーブ禁止】されているからセーブできないぜ。\n ところで回復するかい",
"text": "「ここではコモンイベント15を利用して\n 【セーブ禁止】されているからセーブできないぜ。\n ところで回復するかい"
},
{
"cmd": 1,
"str": 0,
"speaker": "Choice",
"speaker_src": "choice",
"source": "完全回復する",
"text": "完全回復する"
},
{
"cmd": 1,
"str": 1,
"speaker": "Choice",
"speaker_src": "choice",
"source": "何もしない",
"text": "何もしない"
},
{
"cmd": 3,
"str": 0,
"speaker": "Narration",
"speaker_src": "narration",
"source": "「完全回復、了解!\n ピロリロリロ",
"text": "「完全回復、了解!\n ピロリロリロ"
}
]
},
{
"event": 3,
"page": 0,
"name": "宝箱",
"lines": [
{
"cmd": 0,
"str": 0,
"speaker": "Narration",
"speaker_src": "narration",
"source": "「『WOLF RPGエディター』\n これを手にする者には試練が降りかかる」\nと書いてある。",
"text": "「『WOLF RPGエディター』\n これを手にする者には試練が降りかかる」\nと書いてある。"
},
{
"cmd": 1,
"str": 0,
"speaker": "Choice",
"speaker_src": "choice",
"source": "開ける",
"text": "開ける"
},
{
"cmd": 1,
"str": 1,
"speaker": "Choice",
"speaker_src": "choice",
"source": "まだ開けない",
"text": "まだ開けない"
},
{
"cmd": 6,
"str": 0,
"speaker": "Narration",
"speaker_src": "narration",
"source": "”そなたらがウディタを手にするのに\n ふさわしい者かどうか、その力で示せ”",
"text": "”そなたらがウディタを手にするのに\n ふさわしい者かどうか、その力で示せ”"
},
{
"cmd": 7,
"str": 0,
"speaker": "”10ターン以内に",
"speaker_src": "literal_line1_lowconf",
"source": "”10ターン以内に\n \\r[我,わ]が\\r[輩,はい]を倒してみせるのだ!”",
"text": "”10ターン以内に\n \\r[我,わ]が\\r[輩,はい]を倒してみせるのだ!”"
},
{
"cmd": 15,
"str": 0,
"speaker": "Narration",
"speaker_src": "narration",
"source": "”おめでとう、君たちの勝ちだ”",
"text": "”おめでとう、君たちの勝ちだ”"
},
{
"cmd": 16,
"str": 0,
"speaker": "Narration",
"speaker_src": "narration",
"source": "”これを使って、存分に世界を創造するがいい……”",
"text": "”これを使って、存分に世界を創造するがいい……”"
},
{
"cmd": 22,
"str": 0,
"speaker": "ウルファールたちは",
"speaker_src": "literal_line1_lowconf",
"source": "ウルファールたちは\n「WOLF RPGエディター」を手に入れた",
"text": "ウルファールたちは\n「WOLF RPGエディター」を手に入れた"
},
{
"cmd": 23,
"str": 0,
"speaker": "Narration",
"speaker_src": "narration",
"source": "これはマップで使うことができるぞ!\nやってみよう",
"text": "これはマップで使うことができるぞ!\nやってみよう"
},
{
"cmd": 29,
"str": 0,
"speaker": "Narration",
"speaker_src": "narration",
"source": "”また挑戦するがいい……”",
"text": "”また挑戦するがいい……”"
}
]
},
{
"event": 4,
"page": 0,
"name": "店の人",
"lines": [
{
"cmd": 0,
"str": 0,
"speaker": "Narration",
"speaker_src": "narration",
"source": "「いらっしゃい!\n 何か買ってくぅそれとも、セ・エ・ブ\n うふっ♪",
"text": "「いらっしゃい!\n 何か買ってくぅそれとも、セ・エ・ブ\n うふっ♪"
},
{
"cmd": 1,
"str": 0,
"speaker": "Choice",
"speaker_src": "choice",
"source": "ショップ",
"text": "ショップ"
},
{
"cmd": 1,
"str": 1,
"speaker": "Choice",
"speaker_src": "choice",
"source": "セーブで",
"text": "セーブで"
}
]
}
]
}

644
wolf_json/ED_mon.mps.json Normal file
View file

@ -0,0 +1,644 @@
{
"file": "ED_mon.mps",
"kind": "map",
"scenes": [
{
"event": 0,
"page": 2,
"name": "門番(左)",
"lines": [
{
"cmd": 31,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nご苦労さまです。兵士さん。",
"text": "セルリア\nご苦労さまです。兵士さん。"
},
{
"cmd": 32,
"str": 0,
"speaker": "門番",
"speaker_src": "literal_line1_lowconf",
"source": "門番\n\\f[64]ありがとうございます!\n今日も異常なしです",
"text": "門番\n\\f[64]ありがとうございます!\n今日も異常なしです"
},
{
"cmd": 35,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nわぁっ……大きな声ですね……。\n驚いちゃいました。",
"text": "セルリア\nわぁっ……大きな声ですね……。\n驚いちゃいました。"
},
{
"cmd": 36,
"str": 0,
"speaker": "門番",
"speaker_src": "literal_line1_lowconf",
"source": "門番\n……………………い、異常あり異常なおっぱいあり",
"text": "門番\n……………………い、異常あり異常なおっぱいあり"
},
{
"cmd": 60,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\n…………おつかれさん。",
"text": "ローザ\n…………おつかれさん。"
},
{
"cmd": 61,
"str": 0,
"speaker": "門番",
"speaker_src": "literal_line1_lowconf",
"source": "門番\n\\f[64]ありがとうございます!\n今日も異常なしです",
"text": "門番\n\\f[64]ありがとうございます!\n今日も異常なしです"
},
{
"cmd": 63,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\n近くで大きな声を出すな……。耳が痛い……。",
"text": "ローザ\n近くで大きな声を出すな……。耳が痛い……。"
},
{
"cmd": 64,
"str": 0,
"speaker": "門番",
"speaker_src": "literal_line1_lowconf",
"source": "門番\n……………………い、異常あり異常なおっぱいあり",
"text": "門番\n……………………い、異常あり異常なおっぱいあり"
}
]
},
{
"event": 2,
"page": 0,
"name": "ev",
"lines": [
{
"cmd": 35,
"str": 0,
"speaker": "王国の門番(左)",
"speaker_src": "literal_line1_lowconf",
"source": "王国の門番(左)\nはぁ、暇だな。",
"text": "王国の門番(左)\nはぁ、暇だな。"
},
{
"cmd": 39,
"str": 0,
"speaker": "王国の門番(右)",
"speaker_src": "literal_line1_lowconf",
"source": "王国の門番(右)\nせめて貴族がお忍びでやってるパーティに呼ばれた娼婦でも通れば、\n目の保養になるんだが……。",
"text": "王国の門番(右)\nせめて貴族がお忍びでやってるパーティに呼ばれた娼婦でも通れば、\n目の保養になるんだが……。"
},
{
"cmd": 40,
"str": 0,
"speaker": "王国の門番(左)",
"speaker_src": "literal_line1_lowconf",
"source": "王国の門番(左)\nおいおいあんまり大きな声で言うなよ……。\n大抵の貴族が黙認しているとはいえ、ご法度なんだからさ。",
"text": "王国の門番(左)\nおいおいあんまり大きな声で言うなよ……。\n大抵の貴族が黙認しているとはいえ、ご法度なんだからさ。"
},
{
"cmd": 41,
"str": 0,
"speaker": "王国の門番(右)",
"speaker_src": "literal_line1_lowconf",
"source": "王国の門番(右)\nいいだろ別に……、こんな場所じゃ誰も聞いてねえよ。",
"text": "王国の門番(右)\nいいだろ別に……、こんな場所じゃ誰も聞いてねえよ。"
},
{
"cmd": 43,
"str": 0,
"speaker": "王国の門番(左)",
"speaker_src": "literal_line1_lowconf",
"source": "王国の門番(左)\nんとか言ってたらなんか来たぞ……。",
"text": "王国の門番(左)\nんとか言ってたらなんか来たぞ……。"
},
{
"cmd": 44,
"str": 0,
"speaker": "王国の門番(右)",
"speaker_src": "literal_line1_lowconf",
"source": "王国の門番(右)\nほんとだ……。あれは……女\nもしかして娼婦じゃねえか\nさて、今日はどんな女が来るのか……、ワクワク……。",
"text": "王国の門番(右)\nほんとだ……。あれは……女\nもしかして娼婦じゃねえか\nさて、今日はどんな女が来るのか……、ワクワク……。"
},
{
"cmd": 58,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nあらぁ♥門番さん方お疲れ様でぇす♥",
"text": "セルリア\nあらぁ♥門番さん方お疲れ様でぇす♥"
},
{
"cmd": 59,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "赤汗",
"text": "赤汗"
},
{
"cmd": 60,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\n…………………………どうも。",
"text": "ローザ\n…………………………どうも。"
},
{
"cmd": 61,
"str": 0,
"speaker": "王国の門番(左)",
"speaker_src": "literal_line1_lowconf",
"source": "王国の門番(左)\nあ、あの……あなたは……。\nいえ……、あなた様はまさかセ……、",
"text": "王国の門番(左)\nあ、あの……あなたは……。\nいえ……、あなた様はまさかセ……、"
},
{
"cmd": 63,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nあっ、わたくしですかぁ♥\n隣の町から来た娼婦でぇす♥\n今日は貴族の方々のパーティにお呼ばれしていますの♥",
"text": "セルリア\nあっ、わたくしですかぁ♥\n隣の町から来た娼婦でぇす♥\n今日は貴族の方々のパーティにお呼ばれしていますの♥"
},
{
"cmd": 65,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nぼ、僕も……、です……。",
"text": "ローザ\nぼ、僕も……、です……。"
},
{
"cmd": 66,
"str": 0,
"speaker": "王国の門番(左)",
"speaker_src": "literal_line1_lowconf",
"source": "王国の門番(左)\nで、ですが……、どう見ても……",
"text": "王国の門番(左)\nで、ですが……、どう見ても……"
},
{
"cmd": 68,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nはいなんですかぁ♥",
"text": "セルリア\nはいなんですかぁ♥"
},
{
"cmd": 71,
"str": 0,
"speaker": "王国の門番(左)",
"speaker_src": "literal_line1_lowconf",
"source": "王国の門番(左)\nセルリア様……ですよね……\n隣にいるのもローザさんですし……。",
"text": "王国の門番(左)\nセルリア様……ですよね……\n隣にいるのもローザさんですし……。"
},
{
"cmd": 84,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "汗",
"text": "汗"
},
{
"cmd": 85,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nセル……リア……ど、どこのどなたですかぁ\nそんな意地悪を言わないで通してくださいませ♥",
"text": "セルリア\nセル……リア……ど、どこのどなたですかぁ\nそんな意地悪を言わないで通してくださいませ♥"
},
{
"cmd": 86,
"str": 0,
"speaker": "王国の門番(左)",
"speaker_src": "literal_line1_lowconf",
"source": "王国の門番(左)\nえっし、しかし……、どこからどう見てもセルリア様で……。",
"text": "王国の門番(左)\nえっし、しかし……、どこからどう見てもセルリア様で……。"
},
{
"cmd": 87,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "汗",
"text": "汗"
},
{
"cmd": 88,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nもう、何を言っているかわかりませんわー\n知りませんそんな人知りません聞いたことがありませんわー",
"text": "セルリア\nもう、何を言っているかわかりませんわー\n知りませんそんな人知りません聞いたことがありませんわー"
},
{
"cmd": 95,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "汗",
"text": "汗"
},
{
"cmd": 96,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nあ、なるほどわかりました\nつまりは、通行料を払えということかしら\nそれも……、わ・た・く・しの体で……ですよね♥",
"text": "セルリア\nあ、なるほどわかりました\nつまりは、通行料を払えということかしら\nそれも……、わ・た・く・しの体で……ですよね♥"
},
{
"cmd": 98,
"str": 0,
"speaker": "王国の門番(左)",
"speaker_src": "literal_line1_lowconf",
"source": "王国の門番(左)\nい、いえ、別にそのようなことは……。",
"text": "王国の門番(左)\nい、いえ、別にそのようなことは……。"
},
{
"cmd": 106,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "赤",
"text": "赤"
},
{
"cmd": 107,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "赤",
"text": "赤"
},
{
"cmd": 108,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "赤",
"text": "赤"
},
{
"cmd": 109,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nはぁい♥",
"text": "セルリア\nはぁい♥"
},
{
"cmd": 115,
"str": 0,
"speaker": "王国の門番",
"speaker_src": "literal_line1_lowconf",
"source": "王国の門番\n……………………",
"text": "王国の門番\n……………………"
},
{
"cmd": 116,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "赤",
"text": "赤"
},
{
"cmd": 117,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n お客さまを待たせるわけにはいきませんの……♥\n今日のところは、これで見逃していただけませんかしら♥",
"text": "セルリア\n お客さまを待たせるわけにはいきませんの……♥\n今日のところは、これで見逃していただけませんかしら♥"
},
{
"cmd": 118,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "赤汗",
"text": "赤汗"
},
{
"cmd": 119,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nた、頼む……、頼む……。",
"text": "ローザ\nた、頼む……、頼む……。"
},
{
"cmd": 120,
"str": 0,
"speaker": "王国の門番",
"speaker_src": "literal_line1_lowconf",
"source": "王国の門番\nは、はい…………。",
"text": "王国の門番\nは、はい…………。"
},
{
"cmd": 121,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "赤",
"text": "赤"
},
{
"cmd": 122,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "赤汗",
"text": "赤汗"
},
{
"cmd": 123,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nではでは、ごめんあそばせ。",
"text": "セルリア\nではでは、ごめんあそばせ。"
},
{
"cmd": 124,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "赤汗",
"text": "赤汗"
},
{
"cmd": 125,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "赤",
"text": "赤"
},
{
"cmd": 134,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "汗",
"text": "汗"
},
{
"cmd": 138,
"str": 0,
"speaker": "王国の門番(左)",
"speaker_src": "literal_line1_lowconf",
"source": "王国の門番(左)\nまさか、あんなにセルリア様とローザさんにそっくりな娼婦がいるとは……。",
"text": "王国の門番(左)\nまさか、あんなにセルリア様とローザさんにそっくりな娼婦がいるとは……。"
},
{
"cmd": 139,
"str": 0,
"speaker": "王国の門番(右)",
"speaker_src": "literal_line1_lowconf",
"source": "王国の門番(右)\nい、今更だが……、本物じゃないよな",
"text": "王国の門番(右)\nい、今更だが……、本物じゃないよな"
},
{
"cmd": 140,
"str": 0,
"speaker": "王国の門番(左)",
"speaker_src": "literal_line1_lowconf",
"source": "王国の門番(左)\n本物があんなスケベな服着てるわけないだろ\n雰囲気もエロすぎだったし、やりなれてるっていうか……。",
"text": "王国の門番(左)\n本物があんなスケベな服着てるわけないだろ\n雰囲気もエロすぎだったし、やりなれてるっていうか……。"
},
{
"cmd": 141,
"str": 0,
"speaker": "王国の門番(右)",
"speaker_src": "literal_line1_lowconf",
"source": "王国の門番(右)\nヤリマンってああいう感じなんだなぁ。\n特に金髪の方。ありゃ、マジモンだ。\nそれにしても、いい体してたわぁ……。",
"text": "王国の門番(右)\nヤリマンってああいう感じなんだなぁ。\n特に金髪の方。ありゃ、マジモンだ。\nそれにしても、いい体してたわぁ……。"
},
{
"cmd": 142,
"str": 0,
"speaker": "王国の門番(左)",
"speaker_src": "literal_line1_lowconf",
"source": "王国の門番(左)\n顔もセルリア様とローザさんに似てて美人だし…、\nあのドスケベな乳首……、うぅっ。\n勃起で股間が痛ぇよ……。",
"text": "王国の門番(左)\n顔もセルリア様とローザさんに似てて美人だし…、\nあのドスケベな乳首……、うぅっ。\n勃起で股間が痛ぇよ……。"
},
{
"cmd": 143,
"str": 0,
"speaker": "王国の門番(右)",
"speaker_src": "literal_line1_lowconf",
"source": "王国の門番(右)\n俺もだ。\n早く帰って忘れないうちに抜いときたいぜ……。",
"text": "王国の門番(右)\n俺もだ。\n早く帰って忘れないうちに抜いときたいぜ……。"
},
{
"cmd": 153,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "赤",
"text": "赤"
},
{
"cmd": 154,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "汗",
"text": "汗"
},
{
"cmd": 159,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\n…………無事、王国に入り込めたようですね。\nまさかこのような服を着せられるとは思いませんでしたが……、\n作戦は成功したようです。",
"text": "ローザ\n…………無事、王国に入り込めたようですね。\nまさかこのような服を着せられるとは思いませんでしたが……、\n作戦は成功したようです。"
},
{
"cmd": 160,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "赤汗",
"text": "赤汗"
},
{
"cmd": 161,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n無事じゃないわよ",
"text": "セルリア\n無事じゃないわよ"
},
{
"cmd": 162,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "汗",
"text": "汗"
},
{
"cmd": 163,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nえっ",
"text": "ローザ\nえっ"
},
{
"cmd": 164,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "赤汗",
"text": "赤汗"
},
{
"cmd": 165,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n一緒に練習したのに、わたくしにばかり娼婦の真似をさせて\nわたくしだって恥ずかしいのに",
"text": "セルリア\n一緒に練習したのに、わたくしにばかり娼婦の真似をさせて\nわたくしだって恥ずかしいのに"
},
{
"cmd": 166,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "汗",
"text": "汗"
},
{
"cmd": 167,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nす、すみません……。\n演技は苦手なものでして……。",
"text": "ローザ\nす、すみません……。\n演技は苦手なものでして……。"
},
{
"cmd": 168,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "赤汗",
"text": "赤汗"
},
{
"cmd": 169,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nあの兵士さん達、絶対わたくしのほうがいやらしいと思ってる……。\n普段からエッチなことしてる女の子だと思ってるんだ……。",
"text": "セルリア\nあの兵士さん達、絶対わたくしのほうがいやらしいと思ってる……。\n普段からエッチなことしてる女の子だと思ってるんだ……。"
},
{
"cmd": 170,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "汗",
"text": "汗"
},
{
"cmd": 171,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nセ、セルリア様の演技はとてもお上手でしたよ……。",
"text": "ローザ\nセ、セルリア様の演技はとてもお上手でしたよ……。"
},
{
"cmd": 172,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "赤汗",
"text": "赤汗"
},
{
"cmd": 173,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nもうそんなこと言われても嬉しくないもん",
"text": "セルリア\nもうそんなこと言われても嬉しくないもん"
},
{
"cmd": 174,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "汗",
"text": "汗"
},
{
"cmd": 175,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nあ、あまり大きな声を出されてはいけません……。\nその……、周りの目が……。",
"text": "ローザ\nあ、あまり大きな声を出されてはいけません……。\nその……、周りの目が……。"
},
{
"cmd": 176,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "赤汗",
"text": "赤汗"
},
{
"cmd": 177,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nはっ……",
"text": "セルリア\nはっ……"
},
{
"cmd": 182,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "赤汗",
"text": "赤汗"
},
{
"cmd": 183,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n確かに……、わたくし達のことをじろじろと見ていますね……。\n特に……、男の方々が……。",
"text": "セルリア\n確かに……、わたくし達のことをじろじろと見ていますね……。\n特に……、男の方々が……。"
},
{
"cmd": 186,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nよく娼婦が出入りしているらしいですが……、あくまで非公式ですからね。\nこの姿だと目立ちます。\n早く公爵のお屋敷に向かいましょう。",
"text": "ローザ\nよく娼婦が出入りしているらしいですが……、あくまで非公式ですからね。\nこの姿だと目立ちます。\n早く公爵のお屋敷に向かいましょう。"
},
{
"cmd": 188,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nえぇ、そうしましょう。",
"text": "セルリア\nえぇ、そうしましょう。"
}
]
}
]
}

View file

@ -0,0 +1,877 @@
{
"file": "ED_studio.mps",
"kind": "map",
"scenes": [
{
"event": 0,
"page": 0,
"name": "ev",
"lines": [
{
"cmd": 4,
"str": 0,
"speaker": "Narration",
"speaker_src": "narration",
"source": "\n数日後………………",
"text": "\n数日後………………"
},
{
"cmd": 16,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n…………ということがあったんです。",
"text": "セルリア\n…………ということがあったんです。"
},
{
"cmd": 18,
"str": 0,
"speaker": "カメラマン",
"speaker_src": "literal_line1_lowconf",
"source": "カメラマン\nいやぁ、なんて壮大な物語なんだ\nその話だけでも映像化できそうだね",
"text": "カメラマン\nいやぁ、なんて壮大な物語なんだ\nその話だけでも映像化できそうだね"
},
{
"cmd": 20,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n今わたくしがこうして無事でいられるのも、\nまだ町に来て間もない私達を愛してくれた皆様のおかげです。\nねっ、ローザ。",
"text": "セルリア\n今わたくしがこうして無事でいられるのも、\nまだ町に来て間もない私達を愛してくれた皆様のおかげです。\nねっ、ローザ。"
},
{
"cmd": 22,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nま、まぁ……、はい……。",
"text": "ローザ\nま、まぁ……、はい……。"
},
{
"cmd": 23,
"str": 0,
"speaker": "カメラマン",
"speaker_src": "literal_line1_lowconf",
"source": "カメラマン\nでもいいのかい、王国に戻らなくても\n今だったらその王子も失脚して、\n堂々と帰れるんでしょ",
"text": "カメラマン\nでもいいのかい、王国に戻らなくても\n今だったらその王子も失脚して、\n堂々と帰れるんでしょ"
},
{
"cmd": 25,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nいえ……、わたくし達はこれからもこの町で\n暮らしていきたいと思っております。\n皆様から受けた御恩を誠心誠意お返しするために……。",
"text": "セルリア\nいえ……、わたくし達はこれからもこの町で\n暮らしていきたいと思っております。\n皆様から受けた御恩を誠心誠意お返しするために……。"
},
{
"cmd": 26,
"str": 0,
"speaker": "カメラマン",
"speaker_src": "literal_line1_lowconf",
"source": "カメラマン\nさすがセルリアちゃん、ローザちゃん\nそれじゃあ、恩返しの「撮影」早速始めちゃおうか",
"text": "カメラマン\nさすがセルリアちゃん、ローザちゃん\nそれじゃあ、恩返しの「撮影」早速始めちゃおうか"
},
{
"cmd": 31,
"str": 0,
"speaker": "Narration",
"speaker_src": "narration",
"source": "二人のことを教えて",
"text": "二人のことを教えて"
},
{
"cmd": 32,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nわたくし達はとある王国で、聖女と騎士という肩書きをいただいていました。\n身に余る立場でしたがその名に恥じぬよう、\n全身全霊でその職務を果たしていました。",
"text": "セルリア\nわたくし達はとある王国で、聖女と騎士という肩書きをいただいていました。\n身に余る立場でしたがその名に恥じぬよう、\n全身全霊でその職務を果たしていました。"
},
{
"cmd": 33,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nしかし、僕達はその国の王子によって追放されてしまった。\n素性を隠してこの町で暮らしていたんだ。\n騙すような形になってすまない。",
"text": "ローザ\nしかし、僕達はその国の王子によって追放されてしまった。\n素性を隠してこの町で暮らしていたんだ。\n騙すような形になってすまない。"
},
{
"cmd": 34,
"str": 0,
"speaker": "Narration",
"speaker_src": "narration",
"source": "これからどうする?",
"text": "これからどうする?"
},
{
"cmd": 35,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n王国から助けていただいたことも含め\n何より、余所者のわたくし達を受け入れていただいた皆様には\n感謝しかありません。",
"text": "セルリア\n王国から助けていただいたことも含め\n何より、余所者のわたくし達を受け入れていただいた皆様には\n感謝しかありません。"
},
{
"cmd": 36,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nできれば、僕達はこの町でこれからも暮らしていきたいと思っている。\nだから改めてこの町の一員として認めてもらえればありがたい。",
"text": "ローザ\nできれば、僕達はこの町でこれからも暮らしていきたいと思っている。\nだから改めてこの町の一員として認めてもらえればありがたい。"
},
{
"cmd": 37,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n皆様から受けた御恩を誠心誠意お返ししていきたいと思います。",
"text": "セルリア\n皆様から受けた御恩を誠心誠意お返ししていきたいと思います。"
},
{
"cmd": 41,
"str": 0,
"speaker": "Narration",
"speaker_src": "narration",
"source": "この町でやりたいことは",
"text": "この町でやりたいことは"
},
{
"cmd": 42,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nええっと……、わたくしにできる事は少ないですが……、\nお世話になった方達に",
"text": "セルリア\nええっと……、わたくしにできる事は少ないですが……、\nお世話になった方達に"
},
{
"cmd": 43,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nできれば、僕達はこの町でこれからも暮らしていきたいと思っている。\nだから改めてこの町の一員として認めてもらえればありがたい。",
"text": "ローザ\nできれば、僕達はこの町でこれからも暮らしていきたいと思っている。\nだから改めてこの町の一員として認めてもらえればありがたい。"
},
{
"cmd": 48,
"str": 0,
"speaker": "Narration",
"speaker_src": "narration",
"source": "エッチななことについてどう思っている?",
"text": "エッチななことについてどう思っている?"
},
{
"cmd": 49,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nえっ……",
"text": "セルリア\nえっ……"
},
{
"cmd": 50,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\n……こんな質問にも答えなければならないのか",
"text": "ローザ\n……こんな質問にも答えなければならないのか"
},
{
"cmd": 51,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nだ、駄目よ……、ローザ。\n皆さんが見るのだからちゃんと答えないと……。",
"text": "セルリア\nだ、駄目よ……、ローザ。\n皆さんが見るのだからちゃんと答えないと……。"
},
{
"cmd": 52,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nで、ですが……、",
"text": "ローザ\nで、ですが……、"
},
{
"cmd": 53,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n……………………。",
"text": "セルリア\n……………………。"
},
{
"cmd": 54,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nまだわたくしは経験が少ないですので……、\nリードしていただけると嬉しいですね。\nそ、その、ちょっと無理矢理されるのも……、好きです。",
"text": "セルリア\nまだわたくしは経験が少ないですので……、\nリードしていただけると嬉しいですね。\nそ、その、ちょっと無理矢理されるのも……、好きです。"
},
{
"cmd": 55,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nで、でも積極的な女性を好まれる方がいることも存じ上げてますので、\nわたくしも頑張って皆さんを気持ちよくさせれるよう頑張ります",
"text": "セルリア\nで、でも積極的な女性を好まれる方がいることも存じ上げてますので、\nわたくしも頑張って皆さんを気持ちよくさせれるよう頑張ります"
},
{
"cmd": 56,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\n………………。",
"text": "ローザ\n………………。"
},
{
"cmd": 57,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nあまり……、色事は得意ではないが……、\n性的な快感は……、その……、正直嫌いじゃないと最近は思っている……。",
"text": "ローザ\nあまり……、色事は得意ではないが……、\n性的な快感は……、その……、正直嫌いじゃないと最近は思っている……。"
},
{
"cmd": 58,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nも、もし、その気があるのならば、僕を激しく求めて欲しい……。\nそうすれば……、体が快感を欲してしまうから……。",
"text": "ローザ\nも、もし、その気があるのならば、僕を激しく求めて欲しい……。\nそうすれば……、体が快感を欲してしまうから……。"
},
{
"cmd": 60,
"str": 0,
"speaker": "Narration",
"speaker_src": "narration",
"source": "最後に例のポーズで視聴者へメッセージを",
"text": "最後に例のポーズで視聴者へメッセージを"
},
{
"cmd": 61,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nで、でも積極的な女性を好まれる方がいることも存じ上げてますので、\nわたくしも頑張って皆さんを気持ちよくさせれるよう頑張ります",
"text": "セルリア\nで、でも積極的な女性を好まれる方がいることも存じ上げてますので、\nわたくしも頑張って皆さんを気持ちよくさせれるよう頑張ります"
},
{
"cmd": 62,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\n例のポーズって……。",
"text": "ローザ\n例のポーズって……。"
},
{
"cmd": 63,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nあれのこと……ですよね……。",
"text": "セルリア\nあれのこと……ですよね……。"
},
{
"cmd": 64,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n……………………。",
"text": "セルリア\n……………………。"
},
{
"cmd": 65,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nみ、皆さん……、この度は本当にありがとうございました……。\nお見苦しい体かと思いますが、皆さんに喜んで頂けているということで、\nこれからもお相手お願いいたします……♥",
"text": "セルリア\nみ、皆さん……、この度は本当にありがとうございました……。\nお見苦しい体かと思いますが、皆さんに喜んで頂けているということで、\nこれからもお相手お願いいたします……♥"
},
{
"cmd": 66,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nセルリア様のような器量はないが……、\nそれでも僕を欲してもらえるならば、その気持ちには全力で応えよう……♥",
"text": "ローザ\nセルリア様のような器量はないが……、\nそれでも僕を欲してもらえるならば、その気持ちには全力で応えよう……♥"
},
{
"cmd": 79,
"str": 0,
"speaker": "スカウトマン",
"speaker_src": "literal_line1_lowconf",
"source": "スカウトマン\nはいカットォー",
"text": "スカウトマン\nはいカットォー"
},
{
"cmd": 80,
"str": 0,
"speaker": "スカウトマン",
"speaker_src": "literal_line1_lowconf",
"source": "スカウトマン\nいやあ、二人ともデビュー以降すごい人気でね。\n「そもそも彼女達は誰なんだ」って声が多くてさ、\nこのイメージビデオはさらにいい宣伝になるよぉ。",
"text": "スカウトマン\nいやあ、二人ともデビュー以降すごい人気でね。\n「そもそも彼女達は誰なんだ」って声が多くてさ、\nこのイメージビデオはさらにいい宣伝になるよぉ。"
},
{
"cmd": 81,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\n……変わった趣味の人間が多いもんだ。",
"text": "ローザ\n……変わった趣味の人間が多いもんだ。"
},
{
"cmd": 82,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nそうよね。\nわたくし達のことなんて聞いても何も面白くないのに……。",
"text": "セルリア\nそうよね。\nわたくし達のことなんて聞いても何も面白くないのに……。"
},
{
"cmd": 83,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nい、いえ……今のは僕のことを言っているのであって……、\n決してセルリア様のことを含んだわけでは……。",
"text": "ローザ\nい、いえ……今のは僕のことを言っているのであって……、\n決してセルリア様のことを含んだわけでは……。"
},
{
"cmd": 84,
"str": 0,
"speaker": "スカウトマン",
"speaker_src": "literal_line1_lowconf",
"source": "スカウトマン\nそれにしてもいいのかい\nこのイメージビデオの売上はあの王国に全部寄付するって。\n王子とやらが悪いんだから、全部責任取らせればいいのに。",
"text": "スカウトマン\nそれにしてもいいのかい\nこのイメージビデオの売上はあの王国に全部寄付するって。\n王子とやらが悪いんだから、全部責任取らせればいいのに。"
},
{
"cmd": 85,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nたとえ国が浄化されたとしても、必ず痛みが伴います。\n少しでも市民の方々の助けになればと思いまして……。",
"text": "セルリア\nたとえ国が浄化されたとしても、必ず痛みが伴います。\n少しでも市民の方々の助けになればと思いまして……。"
},
{
"cmd": 86,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\n二人で話して決めたんだ\n僕達には健やかに暮らせるだけの金があればいい。",
"text": "ローザ\n二人で話して決めたんだ\n僕達には健やかに暮らせるだけの金があればいい。"
},
{
"cmd": 87,
"str": 0,
"speaker": "スカウトマン",
"speaker_src": "literal_line1_lowconf",
"source": "スカウトマン\nくぅ……、尊すぎる……\nそりゃあファンも増えるわけだ",
"text": "スカウトマン\nくぅ……、尊すぎる……\nそりゃあファンも増えるわけだ"
},
{
"cmd": 92,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nですので、これからも皆さんのお手伝い、させてくださいね♪",
"text": "セルリア\nですので、これからも皆さんのお手伝い、させてくださいね♪"
},
{
"cmd": 93,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\n……あまりセルリア様に無理は言わないでくれ。\n代わり僕が身を粉にして皆の為に働こう。",
"text": "ローザ\n……あまりセルリア様に無理は言わないでくれ。\n代わり僕が身を粉にして皆の為に働こう。"
},
{
"cmd": 94,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nあらぁ、皆さんのことを独り占めする気\nいつの間にそんなに我儘になっちゃったのかしら。",
"text": "セルリア\nあらぁ、皆さんのことを独り占めする気\nいつの間にそんなに我儘になっちゃったのかしら。"
},
{
"cmd": 95,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nち、違いますそういう意味ではありません\n僕は単純にセルリア様のことを……。",
"text": "ローザ\nち、違いますそういう意味ではありません\n僕は単純にセルリア様のことを……。"
},
{
"cmd": 96,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nふふふ……、ローザだけじゃなく、わたくしの相手もしてくださいね。\n約束ですよ。\nじゃないとわたくし嫉妬しちゃいますので。",
"text": "セルリア\nふふふ……、ローザだけじゃなく、わたくしの相手もしてくださいね。\n約束ですよ。\nじゃないとわたくし嫉妬しちゃいますので。"
},
{
"cmd": 97,
"str": 0,
"speaker": "スカウトマン",
"speaker_src": "literal_line1_lowconf",
"source": "スカウトマン\nはいカットォ最高\n一言で言うと最高それ以外なら無限に語れる\n今回のイメージビデオは過去一の傑作になりそうだ",
"text": "スカウトマン\nはいカットォ最高\n一言で言うと最高それ以外なら無限に語れる\n今回のイメージビデオは過去一の傑作になりそうだ"
},
{
"cmd": 98,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n本当ですかそれは、嬉しいです。",
"text": "セルリア\n本当ですかそれは、嬉しいです。"
},
{
"cmd": 99,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\n少しでも王国の助けになれればいいですね。",
"text": "ローザ\n少しでも王国の助けになれればいいですね。"
},
{
"cmd": 105,
"str": 0,
"speaker": "スカウトマン",
"speaker_src": "literal_line1_lowconf",
"source": "スカウトマン\nよし、それじゃあ最後にパッケージの表紙取ろうか\nこう、二人で胸をあわせてギューっと抱き合って目線をこっちにちょうだい",
"text": "スカウトマン\nよし、それじゃあ最後にパッケージの表紙取ろうか\nこう、二人で胸をあわせてギューっと抱き合って目線をこっちにちょうだい"
},
{
"cmd": 107,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nこう……ですか",
"text": "セルリア\nこう……ですか"
},
{
"cmd": 114,
"str": 0,
"speaker": "Narration",
"speaker_src": "narration",
"source": "\nEDCG表示",
"text": "\nEDCG表示"
},
{
"cmd": 115,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nお顔が近いです、セルリア様……。",
"text": "ローザ\nお顔が近いです、セルリア様……。"
},
{
"cmd": 116,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n気にしない気にしない。\nほら、笑顔よローザ。",
"text": "セルリア\n気にしない気にしない。\nほら、笑顔よローザ。"
},
{
"cmd": 119,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\n…………………………。",
"text": "ローザ\n…………………………。"
},
{
"cmd": 120,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nふふふ。まさか二人でこんなことしてるなんて……。\n昔なら考えられないわね。\nとっても幸せ……。",
"text": "セルリア\nふふふ。まさか二人でこんなことしてるなんて……。\n昔なら考えられないわね。\nとっても幸せ……。"
},
{
"cmd": 121,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nはい……、ですが少し複雑です。",
"text": "ローザ\nはい……、ですが少し複雑です。"
},
{
"cmd": 122,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n……どうして",
"text": "セルリア\n……どうして"
},
{
"cmd": 123,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\n結局……、僕はセルリア様を守れませんでした。\nそんな僕に幸せになる資格があるのか……、",
"text": "ローザ\n結局……、僕はセルリア様を守れませんでした。\nそんな僕に幸せになる資格があるのか……、"
},
{
"cmd": 124,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nそして、降って湧いたような幸せが、\n夢のようにふと消えてしまうのではないかと不安になるのです。",
"text": "ローザ\nそして、降って湧いたような幸せが、\n夢のようにふと消えてしまうのではないかと不安になるのです。"
},
{
"cmd": 125,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n確かに夢みたいね。\nわたくし達の未来にこんな形があるなんて……、\nそれに……。",
"text": "セルリア\n確かに夢みたいね。\nわたくし達の未来にこんな形があるなんて……、\nそれに……。"
},
{
"cmd": 126,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nわたくし達、二人ともこんなにエッチな女の子だったなんてね……、ふふっ……。",
"text": "セルリア\nわたくし達、二人ともこんなにエッチな女の子だったなんてね……、ふふっ……。"
},
{
"cmd": 127,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nうぅっ……。ぼ、僕は……その……。",
"text": "ローザ\nうぅっ……。ぼ、僕は……その……。"
},
{
"cmd": 131,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n夢なら何度だって見れるわ。\nもし、夢から醒めてしまったら……、",
"text": "セルリア\n夢なら何度だって見れるわ。\nもし、夢から醒めてしまったら……、"
},
{
"cmd": 132,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nまた皆さんに夢を見せてもらいに行きましょう。\n今度は二人で……ね♥",
"text": "セルリア\nまた皆さんに夢を見せてもらいに行きましょう。\n今度は二人で……ね♥"
},
{
"cmd": 133,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nは、はい……♥",
"text": "ローザ\nは、はい……♥"
},
{
"cmd": 134,
"str": 0,
"speaker": "スカウトマン",
"speaker_src": "literal_line1_lowconf",
"source": "スカウトマン\nおっいいよその表情完璧\nそうだな……、今回のイメージビデオのタイトルは……。",
"text": "スカウトマン\nおっいいよその表情完璧\nそうだな……、今回のイメージビデオのタイトルは……。"
},
{
"cmd": 139,
"str": 0,
"speaker": "Narration",
"speaker_src": "narration",
"source": "\nED終了 タイトル出す",
"text": "\nED終了 タイトル出す"
},
{
"cmd": 151,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nあ、あのぉ……、セルリア様……。",
"text": "ローザ\nあ、あのぉ……、セルリア様……。"
},
{
"cmd": 152,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nどうしたのかしらローザ",
"text": "セルリア\nどうしたのかしらローザ"
},
{
"cmd": 153,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nもう娼婦のフリをする必要はないですよね\nで、あればもうこの服を着る必要も……。",
"text": "ローザ\nもう娼婦のフリをする必要はないですよね\nで、あればもうこの服を着る必要も……。"
},
{
"cmd": 154,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n駄目よぉ。これからわたくし達のことを助けてくれた方達に、\nお礼に回るんだから。",
"text": "セルリア\n駄目よぉ。これからわたくし達のことを助けてくれた方達に、\nお礼に回るんだから。"
},
{
"cmd": 155,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nそ、それとこの服にどのような関係が……、",
"text": "ローザ\nそ、それとこの服にどのような関係が……、"
},
{
"cmd": 156,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nそれは当然、皆さんに喜んで貰えるからに決まってるじゃない。\nほら、こーやって……、ねっ♥",
"text": "セルリア\nそれは当然、皆さんに喜んで貰えるからに決まってるじゃない。\nほら、こーやって……、ねっ♥"
},
{
"cmd": 157,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nわ、わかりました……。",
"text": "ローザ\nわ、わかりました……。"
},
{
"cmd": 162,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nそうださっき先輩のシスターの方に男性の喜ぶ言葉遣いを学んだから、\nローザにも伝授するわねっ。",
"text": "セルリア\nそうださっき先輩のシスターの方に男性の喜ぶ言葉遣いを学んだから、\nローザにも伝授するわねっ。"
},
{
"cmd": 163,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "汗",
"text": "汗"
},
{
"cmd": 164,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nは、はい……。",
"text": "ローザ\nは、はい……。"
},
{
"cmd": 168,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nまず、男性器のことは「おちんぽ」って呼ぶの。\nわかった",
"text": "セルリア\nまず、男性器のことは「おちんぽ」って呼ぶの。\nわかった"
},
{
"cmd": 169,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "赤汗",
"text": "赤汗"
},
{
"cmd": 170,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\n………………\nそ、そのようなはしたない言葉を……",
"text": "ローザ\n………………\nそ、そのようなはしたない言葉を……"
},
{
"cmd": 172,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nはいっ♪言ってみて♥",
"text": "セルリア\nはいっ♪言ってみて♥"
},
{
"cmd": 173,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "汗",
"text": "汗"
},
{
"cmd": 174,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\n………………。",
"text": "ローザ\n………………。"
},
{
"cmd": 175,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "赤汗",
"text": "赤汗"
},
{
"cmd": 176,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nお、おちんぽ…………。",
"text": "ローザ\nお、おちんぽ…………。"
},
{
"cmd": 178,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n………………。",
"text": "セルリア\n………………。"
},
{
"cmd": 179,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "赤汗",
"text": "赤汗"
},
{
"cmd": 180,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nだ、駄目でしたか……",
"text": "ローザ\nだ、駄目でしたか……"
},
{
"cmd": 181,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "汗",
"text": "汗"
},
{
"cmd": 182,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n恥じらいながら口にする方が、逆に良いのかもしれないわね……。\n参考になったわ……。さすがねローザ。",
"text": "セルリア\n恥じらいながら口にする方が、逆に良いのかもしれないわね……。\n参考になったわ……。さすがねローザ。"
},
{
"cmd": 183,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "赤汗",
"text": "赤汗"
},
{
"cmd": 184,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nお、お褒めいただきありがとうございます……。",
"text": "ローザ\nお、お褒めいただきありがとうございます……。"
},
{
"cmd": 186,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nそれとね、エッチな声を出す時は、\n全力でお腹から声を出した方がいいんだって。",
"text": "セルリア\nそれとね、エッチな声を出す時は、\n全力でお腹から声を出した方がいいんだって。"
},
{
"cmd": 188,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n気持ち良くなっちゃうと、自然と「お゙っ♥」ってはしたない声出ちゃうでしょ\n男性の方はそれが好きらしいの。",
"text": "セルリア\n気持ち良くなっちゃうと、自然と「お゙っ♥」ってはしたない声出ちゃうでしょ\n男性の方はそれが好きらしいの。"
},
{
"cmd": 189,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "赤汗",
"text": "赤汗"
},
{
"cmd": 190,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nぼ、僕にできますかね……。",
"text": "ローザ\nぼ、僕にできますかね……。"
},
{
"cmd": 195,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nさっ、早速実践よ。頑張りましょうね♪",
"text": "セルリア\nさっ、早速実践よ。頑張りましょうね♪"
},
{
"cmd": 196,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "赤汗",
"text": "赤汗"
},
{
"cmd": 197,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nは、はい……。",
"text": "ローザ\nは、はい……。"
},
{
"cmd": 201,
"str": 0,
"speaker": "Narration",
"speaker_src": "narration",
"source": "\nセルリアとローザが\\c[06]淫語\\c[00]を習得しました!\nセルリアとローザの\\c[06]貞操観念\\c[00]が変化しました!",
"text": "\nセルリアとローザが\\c[06]淫語\\c[00]を習得しました!\nセルリアとローザの\\c[06]貞操観念\\c[00]が変化しました!"
},
{
"cmd": 236,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n次は、おちんぽが顔の前に来た時に、\n嬉しそうに「くっさぁっ……♥」って言うの。はいっ♪",
"text": "セルリア\n次は、おちんぽが顔の前に来た時に、\n嬉しそうに「くっさぁっ……♥」って言うの。はいっ♪"
},
{
"cmd": 237,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nこの指導、一体どれくらいあるのですか……",
"text": "ローザ\nこの指導、一体どれくらいあるのですか……"
},
{
"cmd": 248,
"str": 0,
"speaker": "Narration",
"speaker_src": "narration",
"source": "\nセルリアとローザが隠語を学びました。",
"text": "\nセルリアとローザが隠語を学びました。"
}
]
}
]
}

773
wolf_json/ED_tika.mps.json Normal file
View file

@ -0,0 +1,773 @@
{
"file": "ED_tika.mps",
"kind": "map",
"scenes": [
{
"event": 0,
"page": 0,
"name": "ev",
"lines": [
{
"cmd": 5,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nん……。",
"text": "セルリア\nん……。"
},
{
"cmd": 14,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nここは……。",
"text": "セルリア\nここは……。"
},
{
"cmd": 16,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\nやっとお目覚めか。\n今の服装と一緒でおめでたい頭をしているようだな。",
"text": "王子\nやっとお目覚めか。\n今の服装と一緒でおめでたい頭をしているようだな。"
},
{
"cmd": 24,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n殿下……\nわたくしは何を……ここはどこですか公爵様は",
"text": "セルリア\n殿下……\nわたくしは何を……ここはどこですか公爵様は"
},
{
"cmd": 26,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\n知っているか\n歴史上、優秀な城塞には一つだけ弱点があるとされてるんだ。",
"text": "王子\n知っているか\n歴史上、優秀な城塞には一つだけ弱点があるとされてるんだ。"
},
{
"cmd": 28,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n……一体何の話をしているんですか",
"text": "セルリア\n……一体何の話をしているんですか"
},
{
"cmd": 29,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\n理由は簡単、その弱点に向かって敵をおびき寄せるためだ。",
"text": "王子\n理由は簡単、その弱点に向かって敵をおびき寄せるためだ。"
},
{
"cmd": 33,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nまさか……ハメハメ公爵がわたくし達を……",
"text": "セルリア\nまさか……ハメハメ公爵がわたくし達を……"
},
{
"cmd": 34,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\nくっくっく……。やっと気づいたか。奴の名の通り、貴様らはハメられたのだよ。\n奴は反乱分子を炙り出すための撒き餌のようなものさ。",
"text": "王子\nくっくっく……。やっと気づいたか。奴の名の通り、貴様らはハメられたのだよ。\n奴は反乱分子を炙り出すための撒き餌のようなものさ。"
},
{
"cmd": 35,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\nしかし、まさかここまでの証拠を集めあげるとは……、\n貴様らは追放ではなく、処刑してしまった方が良いかとも思ったぞ。",
"text": "王子\nしかし、まさかここまでの証拠を集めあげるとは……、\n貴様らは追放ではなく、処刑してしまった方が良いかとも思ったぞ。"
},
{
"cmd": 37,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nそう……、わたくし達は殿下の罠に嵌ってしまったのね……。\n うぅっ……、折角頑張って集めた証拠が……",
"text": "セルリア\nそう……、わたくし達は殿下の罠に嵌ってしまったのね……。\n うぅっ……、折角頑張って集めた証拠が……"
},
{
"cmd": 38,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\nそうだ……、ここはどこかと聞いていたな。\nここは、王宮の地下室さ。\n貴様らのような輩を調教し、商品とするための場所だ。",
"text": "王子\nそうだ……、ここはどこかと聞いていたな。\nここは、王宮の地下室さ。\n貴様らのような輩を調教し、商品とするための場所だ。"
},
{
"cmd": 40,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nここが……捕らえている令嬢達を解放なさい",
"text": "セルリア\nここが……捕らえている令嬢達を解放なさい"
},
{
"cmd": 41,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\nするわけがないだろう。\nここまで調べたのなら知っているだろう、\nまだまだ人手不足だということを。",
"text": "王子\nするわけがないだろう。\nここまで調べたのなら知っているだろう、\nまだまだ人手不足だということを。"
},
{
"cmd": 42,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\n……まぁ、貴様等のおかげでその問題も解決しそうだ。\nあの女、堅物の生娘達だと思っていたが、調教の手間が省けたよ。\nあれには先に早速働いてもらってる。",
"text": "王子\n……まぁ、貴様等のおかげでその問題も解決しそうだ。\nあの女、堅物の生娘達だと思っていたが、調教の手間が省けたよ。\nあれには先に早速働いてもらってる。"
},
{
"cmd": 44,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n一体何を言って……、",
"text": "セルリア\n一体何を言って……、"
},
{
"cmd": 48,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n…………\n待ってください……\nローザは……ローザはどこですか",
"text": "セルリア\n…………\n待ってください……\nローザは……ローザはどこですか"
},
{
"cmd": 49,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\n体質のせいか奴はだいぶ早く目が覚めたからな。\nほら、ちょうどいいタイミングだ、そこから見えるぞ。",
"text": "王子\n体質のせいか奴はだいぶ早く目が覚めたからな。\nほら、ちょうどいいタイミングだ、そこから見えるぞ。"
},
{
"cmd": 51,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nローザに何かしたらわたくしが絶対に許しませんから",
"text": "セルリア\nローザに何かしたらわたくしが絶対に許しませんから"
},
{
"cmd": 52,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\n奴も同じことを言っていたよ。\nそして、自分が代わりになるから貴様のことを助けろとな。",
"text": "王子\n奴も同じことを言っていたよ。\nそして、自分が代わりになるから貴様のことを助けろとな。"
},
{
"cmd": 53,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\nほら、見て見ろ。さぁ、目に焼き付けろ。\n貴様を守るために、奴がどんな目に合っているのかをな。",
"text": "王子\nほら、見て見ろ。さぁ、目に焼き付けろ。\n貴様を守るために、奴がどんな目に合っているのかをな。"
},
{
"cmd": 74,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nなんて酷いことを……。",
"text": "セルリア\nなんて酷いことを……。"
},
{
"cmd": 75,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\n仕方ないだろう。\n自分が誰かの分まで倍の金を稼ぐと息まいたんだからな。",
"text": "王子\n仕方ないだろう。\n自分が誰かの分まで倍の金を稼ぐと息まいたんだからな。"
},
{
"cmd": 76,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\n一介の騎士如きが、聖女の代わりに慰み者になったところで、\n稼げる額はたかがしれているんだが……、",
"text": "王子\n一介の騎士如きが、聖女の代わりに慰み者になったところで、\n稼げる額はたかがしれているんだが……、"
},
{
"cmd": 77,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\nまぁ、騎士故に体は丈夫だろう。\nあんな女でも意外と好きものには人気があるようだからな、\nしっかりと稼いでもらうことにするよ。",
"text": "王子\nまぁ、騎士故に体は丈夫だろう。\nあんな女でも意外と好きものには人気があるようだからな、\nしっかりと稼いでもらうことにするよ。"
},
{
"cmd": 79,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nそんな…………、ローザ……。",
"text": "セルリア\nそんな…………、ローザ……。"
},
{
"cmd": 80,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\nいい従者を持ったな。くくく……。\nさぁ、貴様はどこへでも行くがいい。",
"text": "王子\nいい従者を持ったな。くくく……。\nさぁ、貴様はどこへでも行くがいい。"
},
{
"cmd": 82,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nえっ………………。",
"text": "セルリア\nえっ………………。"
},
{
"cmd": 83,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\n約束だからな。貴様は見逃してやる。\nまぁ、奴には壊れるまでここで働いてもらが……。",
"text": "王子\n約束だからな。貴様は見逃してやる。\nまぁ、奴には壊れるまでここで働いてもらが……。"
},
{
"cmd": 85,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n…………。",
"text": "セルリア\n…………。"
},
{
"cmd": 87,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nお願いします……。\nローザを解放してください……。",
"text": "セルリア\nお願いします……。\nローザを解放してください……。"
},
{
"cmd": 89,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nわたくしが代わりになんでもしますから……。\nお願いです……。ローザを自由にしてください……。",
"text": "セルリア\nわたくしが代わりになんでもしますから……。\nお願いです……。ローザを自由にしてください……。"
},
{
"cmd": 90,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\nふん、そこまで言うなら仕方がないな。",
"text": "王子\nふん、そこまで言うなら仕方がないな。"
},
{
"cmd": 92,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n………………わ、わかりました。",
"text": "セルリア\n………………わ、わかりました。"
},
{
"cmd": 104,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "赤",
"text": "赤"
},
{
"cmd": 122,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nローザ……、ごめんなさい……。",
"text": "セルリア\nローザ……、ごめんなさい……。"
},
{
"cmd": 123,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nセルリア様……\nおい約束が違うではないか",
"text": "ローザ\nセルリア様……\nおい約束が違うではないか"
},
{
"cmd": 124,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\nケツの穴まで犯されてヨガっていた女がいっぱしの口を利くじゃないか。",
"text": "王子\nケツの穴まで犯されてヨガっていた女がいっぱしの口を利くじゃないか。"
},
{
"cmd": 125,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nそ、それは……、おまえらが薬を使って……\nそれよりも代わりにセルリア様は解放すると言っていたはずだ",
"text": "ローザ\nそ、それは……、おまえらが薬を使って……\nそれよりも代わりにセルリア様は解放すると言っていたはずだ"
},
{
"cmd": 126,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\n仕方ないだろう。\nこの女がどうしてもというからな。",
"text": "王子\n仕方ないだろう。\nこの女がどうしてもというからな。"
},
{
"cmd": 127,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nローザ……、わたくしが巻き込んでしまったのだから、もういいの……。\nわたくしのために犠牲になるのはやめて……。",
"text": "セルリア\nローザ……、わたくしが巻き込んでしまったのだから、もういいの……。\nわたくしのために犠牲になるのはやめて……。"
},
{
"cmd": 128,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nそんなこと言わないでください\n僕はセルリア様さえ無事なら……",
"text": "ローザ\nそんなこと言わないでください\n僕はセルリア様さえ無事なら……"
},
{
"cmd": 129,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\nはぁ………………。\n俺はそんなお涙頂戴の寸劇が見たいわけじゃないんだが……。\n結局どっちが稼いでくれるんだ",
"text": "王子\nはぁ………………。\n俺はそんなお涙頂戴の寸劇が見たいわけじゃないんだが……。\n結局どっちが稼いでくれるんだ"
},
{
"cmd": 130,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nわたくしです。\nもうこれ以上ローザに手は出させません。",
"text": "セルリア\nわたくしです。\nもうこれ以上ローザに手は出させません。"
},
{
"cmd": 131,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nそんな馬鹿なことを……\n僕に決まっている……だからセルリア様だ",
"text": "ローザ\nそんな馬鹿なことを……\n僕に決まっている……だからセルリア様だ"
},
{
"cmd": 132,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\nもういい……。\n俺が決めてやる。\nほら、準備しろ",
"text": "王子\nもういい……。\n俺が決めてやる。\nほら、準備しろ"
},
{
"cmd": 161,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "赤",
"text": "赤"
},
{
"cmd": 162,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "赤",
"text": "赤"
},
{
"cmd": 173,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nロー……ザ……あっ……♥",
"text": "セルリア\nロー……ザ……あっ……♥"
},
{
"cmd": 174,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nセルリア様ぁっ……♥",
"text": "ローザ\nセルリア様ぁっ……♥"
},
{
"cmd": 180,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\nやっと終わったか……。",
"text": "王子\nやっと終わったか……。"
},
{
"cmd": 181,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\nこいつらとヤリたい貴族共は沢山いるからな。\n後はこの二人を使って、有力者達を取り込んでいけば、\n俺の地位も盤石だハハハッ",
"text": "王子\nこいつらとヤリたい貴族共は沢山いるからな。\n後はこの二人を使って、有力者達を取り込んでいけば、\n俺の地位も盤石だハハハッ"
},
{
"cmd": 183,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\n後はあの二人を使って、有力者達を取り込み、\n俺の地位を盤石とするだけだからなハハハッ",
"text": "王子\n後はあの二人を使って、有力者達を取り込み、\n俺の地位を盤石とするだけだからなハハハッ"
},
{
"cmd": 191,
"str": 0,
"speaker": "Narration",
"speaker_src": "narration",
"source": "\nちょっとまったぁ",
"text": "\nちょっとまったぁ"
},
{
"cmd": 195,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\nだ、誰だ……",
"text": "王子\nだ、誰だ……"
},
{
"cmd": 210,
"str": 0,
"speaker": "全員",
"speaker_src": "literal_line1_lowconf",
"source": "全員\n「俺だ」「僕だ」「私だ」「オウ」「★※□」",
"text": "全員\n「俺だ」「僕だ」「私だ」「オウ」「★※□」"
},
{
"cmd": 212,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\n……っ多いな\nそして本当に誰なんだおまえらは",
"text": "王子\n……っ多いな\nそして本当に誰なんだおまえらは"
},
{
"cmd": 213,
"str": 0,
"speaker": "司祭",
"speaker_src": "literal_line1_lowconf",
"source": "司祭\n無事ですか。セルリア様、ローザさん。",
"text": "司祭\n無事ですか。セルリア様、ローザさん。"
},
{
"cmd": 217,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n司祭様……、それに皆様……、どうしてここに……",
"text": "セルリア\n司祭様……、それに皆様……、どうしてここに……"
},
{
"cmd": 218,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\n貴様らの仲間か……",
"text": "王子\n貴様らの仲間か……"
},
{
"cmd": 220,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\n仲間……どころか、\n 僕も知らない奴がいる気もするが……",
"text": "ローザ\n仲間……どころか、\n 僕も知らない奴がいる気もするが……"
},
{
"cmd": 222,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\nどいつここいつも共通点すらない\nなんだこの集団本当に誰なんだ",
"text": "王子\nどいつここいつも共通点すらない\nなんだこの集団本当に誰なんだ"
},
{
"cmd": 228,
"str": 0,
"speaker": "司祭",
"speaker_src": "literal_line1_lowconf",
"source": "司祭\nふぉっふぉっふぉ、\n私達はその二人が住む町のただの住人達ですよ。",
"text": "司祭\nふぉっふぉっふぉ、\n私達はその二人が住む町のただの住人達ですよ。"
},
{
"cmd": 229,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\nおまえは…………、まさかあの町の司祭か\nせめておまえが先頭に立っておけよ\nなんでカメラマンみたいなやつが一番前にいるんだ",
"text": "王子\nおまえは…………、まさかあの町の司祭か\nせめておまえが先頭に立っておけよ\nなんでカメラマンみたいなやつが一番前にいるんだ"
},
{
"cmd": 230,
"str": 0,
"speaker": "司祭",
"speaker_src": "literal_line1_lowconf",
"source": "司祭\n歳を取ると若い人についていくのが大変で……。",
"text": "司祭\n歳を取ると若い人についていくのが大変で……。"
},
{
"cmd": 233,
"str": 0,
"speaker": "司祭",
"speaker_src": "literal_line1_lowconf",
"source": "司祭\nごほん……、ともかく、その二人は私の……、いえ、私達のものです。\n返してもらいますよ",
"text": "司祭\nごほん……、ともかく、その二人は私の……、いえ、私達のものです。\n返してもらいますよ"
},
{
"cmd": 235,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nそんな……、みなさん……わたくし達のために……",
"text": "セルリア\nそんな……、みなさん……わたくし達のために……"
},
{
"cmd": 238,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\nくそっおい見張りの者達はどこだ\nこの不敬者共を即刻処刑しろ",
"text": "王子\nくそっおい見張りの者達はどこだ\nこの不敬者共を即刻処刑しろ"
},
{
"cmd": 239,
"str": 0,
"speaker": "司祭",
"speaker_src": "literal_line1_lowconf",
"source": "司祭\n既に王室内は制圧済みですよ。\n後はあなただけです。",
"text": "司祭\n既に王室内は制圧済みですよ。\n後はあなただけです。"
},
{
"cmd": 240,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\n馬鹿……、なっ……そんなことできるわけ……。",
"text": "王子\n馬鹿……、なっ……そんなことできるわけ……。"
},
{
"cmd": 241,
"str": 0,
"speaker": "司祭",
"speaker_src": "literal_line1_lowconf",
"source": "司祭\nさっ、諦めて降伏いたしなさい",
"text": "司祭\nさっ、諦めて降伏いたしなさい"
},
{
"cmd": 242,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\nくそっ聖女だの騎士だのもてはやされているが……、\n布を一枚剥いでしまえばただの肉穴だろう\nそれを助けるために王族に歯向かうだと……",
"text": "王子\nくそっ聖女だの騎士だのもてはやされているが……、\n布を一枚剥いでしまえばただの肉穴だろう\nそれを助けるために王族に歯向かうだと……"
},
{
"cmd": 245,
"str": 0,
"speaker": "カメラマン",
"speaker_src": "literal_line1_lowconf",
"source": "カメラマン\nバッキャロウ\nこん顔も体も性格もいい女、他にどこにもいねえだろうが\n千年に一人の逸材だ",
"text": "カメラマン\nバッキャロウ\nこん顔も体も性格もいい女、他にどこにもいねえだろうが\n千年に一人の逸材だ"
},
{
"cmd": 248,
"str": 0,
"speaker": "店主",
"speaker_src": "literal_line1_lowconf",
"source": "店主\n彼女達のおかげで日々が色づき、\n救われた男達がどれだけいると思うんだ",
"text": "店主\n彼女達のおかげで日々が色づき、\n救われた男達がどれだけいると思うんだ"
},
{
"cmd": 251,
"str": 0,
"speaker": "温泉の受付のおじさん",
"speaker_src": "literal_line1_lowconf",
"source": "温泉の受付のおじさん\n二人のスケベな姿を見る度、\n毎日頑張ろうって思えるんだ\n後、売上もめっちゃ上がった",
"text": "温泉の受付のおじさん\n二人のスケベな姿を見る度、\n毎日頑張ろうって思えるんだ\n後、売上もめっちゃ上がった"
},
{
"cmd": 254,
"str": 0,
"speaker": "門番",
"speaker_src": "literal_line1_lowconf",
"source": "門番\n僕が、町の門を守るように、\n二人は僕達の心の門を守っていたのさ\n今、門を放置して来てるけど",
"text": "門番\n僕が、町の門を守るように、\n二人は僕達の心の門を守っていたのさ\n今、門を放置して来てるけど"
},
{
"cmd": 256,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nあぁ……、わたくし達のことをそこまで思っていてくださったのですね……",
"text": "セルリア\nあぁ……、わたくし達のことをそこまで思っていてくださったのですね……"
},
{
"cmd": 258,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\n主に自分達の欲望のためな気もするが……",
"text": "ローザ\n主に自分達の欲望のためな気もするが……"
},
{
"cmd": 259,
"str": 0,
"speaker": "司祭",
"speaker_src": "literal_line1_lowconf",
"source": "司祭\n……というわけですよ。\n残念ですが、彼女達をあなたの道具になどさせません。",
"text": "司祭\n……というわけですよ。\n残念ですが、彼女達をあなたの道具になどさせません。"
},
{
"cmd": 265,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\n貴様ら……、好き放題言っているが……、\nわかっているのか王に逆らうということを。",
"text": "王子\n貴様ら……、好き放題言っているが……、\nわかっているのか王に逆らうということを。"
},
{
"cmd": 269,
"str": 0,
"speaker": "金持ちのおじさん",
"speaker_src": "literal_line1_lowconf",
"source": "金持ちのおじさん\n王と言うのであれば、私も財政界の王と言われていますよ。\nこの国にも多額の支援を行っています。",
"text": "金持ちのおじさん\n王と言うのであれば、私も財政界の王と言われていますよ。\nこの国にも多額の支援を行っています。"
},
{
"cmd": 272,
"str": 0,
"speaker": "牧場主",
"speaker_src": "literal_line1_lowconf",
"source": "牧場主\n僕も牧場王さ\nこの国の食料がどれだけ僕の所から来ているか……。\nそれを止めることだって……。フフ。",
"text": "牧場主\n僕も牧場王さ\nこの国の食料がどれだけ僕の所から来ているか……。\nそれを止めることだって……。フフ。"
},
{
"cmd": 275,
"str": 0,
"speaker": "スカウトマン",
"speaker_src": "literal_line1_lowconf",
"source": "スカウトマン\n僕も業界の王って一部では言われているね。\nニュースとしてあなたの悪行、\nあることないこと、各国にリークできちゃうんだよ。",
"text": "スカウトマン\n僕も業界の王って一部では言われているね。\nニュースとしてあなたの悪行、\nあることないこと、各国にリークできちゃうんだよ。"
},
{
"cmd": 278,
"str": 0,
"speaker": "オーク",
"speaker_src": "literal_line1_lowconf",
"source": "オーク\nオデオークウゴ",
"text": "オーク\nオデオークウゴ"
},
{
"cmd": 282,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\nくそ……くそくそくそくそくそくそがぁ\nその女達の何が良いというのだ\n聖女と騎士が、王族より偉いというのか",
"text": "王子\nくそ……くそくそくそくそくそくそがぁ\nその女達の何が良いというのだ\n聖女と騎士が、王族より偉いというのか"
},
{
"cmd": 285,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n地位、名誉、権力……、そのようなものは関係ありません……。",
"text": "セルリア\n地位、名誉、権力……、そのようなものは関係ありません……。"
},
{
"cmd": 287,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nセルリア様……。",
"text": "ローザ\nセルリア様……。"
},
{
"cmd": 288,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\n何ぃ",
"text": "王子\n何ぃ"
},
{
"cmd": 290,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nわたくし達はあなたに追放され、この方達が住む町に流れ着き、\n今までの肩書を捨て暮らしていました……。",
"text": "セルリア\nわたくし達はあなたに追放され、この方達が住む町に流れ着き、\n今までの肩書を捨て暮らしていました……。"
},
{
"cmd": 292,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n見知らぬわたくし達を皆様方は温かく迎え入れていただきました……。",
"text": "セルリア\n見知らぬわたくし達を皆様方は温かく迎え入れていただきました……。"
},
{
"cmd": 294,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nそう……、そこにあったのは「愛」です\n互いに与え合う「無償の愛」です",
"text": "セルリア\nそう……、そこにあったのは「愛」です\n互いに与え合う「無償の愛」です"
},
{
"cmd": 296,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nい、一部有償の人間もいたと思いますが……。",
"text": "ローザ\nい、一部有償の人間もいたと思いますが……。"
},
{
"cmd": 298,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nと、とにかく愛です愛なのです",
"text": "セルリア\nと、とにかく愛です愛なのです"
},
{
"cmd": 301,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n殿下あなたはわたくし達の愛の力によって敗れるのです",
"text": "セルリア\n殿下あなたはわたくし達の愛の力によって敗れるのです"
},
{
"cmd": 302,
"str": 0,
"speaker": "王子",
"speaker_src": "literal_line1_lowconf",
"source": "王子\nうっ……うっ……ああああああああああああああああ",
"text": "王子\nうっ……うっ……ああああああああああああああああ"
}
]
}
]
}

View file

@ -0,0 +1,349 @@
{
"file": "ED_yasiki.mps",
"kind": "map",
"scenes": [
{
"event": 0,
"page": 0,
"name": "ev",
"lines": [
{
"cmd": 23,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n公爵様……、突然の来訪、お許しください。",
"text": "セルリア\n公爵様……、突然の来訪、お許しください。"
},
{
"cmd": 24,
"str": 0,
"speaker": "公爵",
"speaker_src": "literal_line1_lowconf",
"source": "公爵\nおぉ、どなたかと思えば、\n随分と刺激的な格好をされた方が来ましたな。ハハッ。",
"text": "公爵\nおぉ、どなたかと思えば、\n随分と刺激的な格好をされた方が来ましたな。ハハッ。"
},
{
"cmd": 25,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "赤汗",
"text": "赤汗"
},
{
"cmd": 26,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nこ、これには深い理由がありまして……。",
"text": "セルリア\nこ、これには深い理由がありまして……。"
},
{
"cmd": 27,
"str": 0,
"speaker": "公爵",
"speaker_src": "literal_line1_lowconf",
"source": "公爵\nははっ、セルリア様方のことです。\n何かお考えがあってでしょう。",
"text": "公爵\nははっ、セルリア様方のことです。\n何かお考えがあってでしょう。"
},
{
"cmd": 32,
"str": 0,
"speaker": "公爵",
"speaker_src": "literal_line1_lowconf",
"source": "公爵\nさて、王子の件についてでしたよね……。",
"text": "公爵\nさて、王子の件についてでしたよね……。"
},
{
"cmd": 34,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n王国内では禁じられている娼婦の招集、禁制の魔法薬の製造、\nこれらに殿下とその一派の貴族の方々が関与しています。",
"text": "セルリア\n王国内では禁じられている娼婦の招集、禁制の魔法薬の製造、\nこれらに殿下とその一派の貴族の方々が関与しています。"
},
{
"cmd": 36,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nまだ証拠こそありませんが、\n反王子派閥の貴族から地位を剥奪し、そこの子女を隷女にしているなど、\n余罪は数しれません。",
"text": "ローザ\nまだ証拠こそありませんが、\n反王子派閥の貴族から地位を剥奪し、そこの子女を隷女にしているなど、\n余罪は数しれません。"
},
{
"cmd": 37,
"str": 0,
"speaker": "公爵",
"speaker_src": "literal_line1_lowconf",
"source": "公爵\nそれはそれは……、なんとなんと……。",
"text": "公爵\nそれはそれは……、なんとなんと……。"
},
{
"cmd": 39,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nお願いします。\n殿下達の悪行を止めるために、\n反王子派閥であるハメハメ公爵の力をお借しください",
"text": "セルリア\nお願いします。\n殿下達の悪行を止めるために、\n反王子派閥であるハメハメ公爵の力をお借しください"
},
{
"cmd": 40,
"str": 0,
"speaker": "公爵",
"speaker_src": "literal_line1_lowconf",
"source": "公爵\nなるほど……。しかし、殿下に加えその周辺貴族まで関わっているとなると、\n事は相当大きくなりそうですな。",
"text": "公爵\nなるほど……。しかし、殿下に加えその周辺貴族まで関わっているとなると、\n事は相当大きくなりそうですな。"
},
{
"cmd": 42,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nしかし……、そうせねばこの王国の民は救えません……\nどうかお力添えを……。",
"text": "セルリア\nしかし……、そうせねばこの王国の民は救えません……\nどうかお力添えを……。"
},
{
"cmd": 48,
"str": 0,
"speaker": "公爵",
"speaker_src": "literal_line1_lowconf",
"source": "公爵\nそれで今日はどのような要件で……。",
"text": "公爵\nそれで今日はどのような要件で……。"
},
{
"cmd": 49,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "赤汗",
"text": "赤汗"
},
{
"cmd": 50,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n話は既に耳にしているかと思いますが……、\nこれを見てください……。",
"text": "セルリア\n話は既に耳にしているかと思いますが……、\nこれを見てください……。"
},
{
"cmd": 52,
"str": 0,
"speaker": "公爵",
"speaker_src": "literal_line1_lowconf",
"source": "公爵\nこれは……",
"text": "公爵\nこれは……"
},
{
"cmd": 53,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n王国内では禁じられている娼婦の招集、禁制の魔法薬の製造、\nさらに、遠くの町で危険なモンスターの研究まで……。\nそれに殿下とその一派の貴族の方々が関与している証拠です。",
"text": "セルリア\n王国内では禁じられている娼婦の招集、禁制の魔法薬の製造、\nさらに、遠くの町で危険なモンスターの研究まで……。\nそれに殿下とその一派の貴族の方々が関与している証拠です。"
},
{
"cmd": 54,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nまだ証拠こそありませんが、\n反王子派閥の貴族から地位を剥奪し、そこの子女を隷女にしているなど、\n余罪は数しれません。",
"text": "ローザ\nまだ証拠こそありませんが、\n反王子派閥の貴族から地位を剥奪し、そこの子女を隷女にしているなど、\n余罪は数しれません。"
},
{
"cmd": 55,
"str": 0,
"speaker": "公爵",
"speaker_src": "literal_line1_lowconf",
"source": "公爵\nそれはそれは……、なんとなんと……。",
"text": "公爵\nそれはそれは……、なんとなんと……。"
},
{
"cmd": 56,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nそこでお願いがあります。\n反王子派閥であるハメハメ公爵の力をお借りして、\n殿下達の悪行を止めたいのです",
"text": "セルリア\nそこでお願いがあります。\n反王子派閥であるハメハメ公爵の力をお借りして、\n殿下達の悪行を止めたいのです"
},
{
"cmd": 57,
"str": 0,
"speaker": "ダンショク男爵",
"speaker_src": "literal_line1_lowconf",
"source": "ダンショク男爵\nなるほど……。しかし、殿下に加えその周辺貴族まで関わっているとなると、\n事は相当大きくなりそうですな。",
"text": "ダンショク男爵\nなるほど……。しかし、殿下に加えその周辺貴族まで関わっているとなると、\n事は相当大きくなりそうですな。"
},
{
"cmd": 60,
"str": 0,
"speaker": "公爵",
"speaker_src": "literal_line1_lowconf",
"source": "公爵\nふむ…………。",
"text": "公爵\nふむ…………。"
},
{
"cmd": 65,
"str": 0,
"speaker": "公爵",
"speaker_src": "literal_line1_lowconf",
"source": "公爵\nわかりました。このハメハメ、ひと肌脱ぎましょう。",
"text": "公爵\nわかりました。このハメハメ、ひと肌脱ぎましょう。"
},
{
"cmd": 67,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n公爵様……",
"text": "セルリア\n公爵様……"
},
{
"cmd": 68,
"str": 0,
"speaker": "公爵",
"speaker_src": "literal_line1_lowconf",
"source": "公爵\n私が脱いだとしても、セルリア様方のようにセクシーにはなりませんがな。\nはっはっはっ",
"text": "公爵\n私が脱いだとしても、セルリア様方のようにセクシーにはなりませんがな。\nはっはっはっ"
},
{
"cmd": 69,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "赤汗",
"text": "赤汗"
},
{
"cmd": 70,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nもう、からかわないでください……",
"text": "セルリア\nもう、からかわないでください……"
},
{
"cmd": 71,
"str": 0,
"speaker": "公爵",
"speaker_src": "literal_line1_lowconf",
"source": "公爵\nとはいえ、大きな話です。\n家臣の者も交えて詳細な話を詰めたい。",
"text": "公爵\nとはいえ、大きな話です。\n家臣の者も交えて詳細な話を詰めたい。"
},
{
"cmd": 79,
"str": 0,
"speaker": "公爵",
"speaker_src": "literal_line1_lowconf",
"source": "公爵\n暖かいお茶でも飲んでお待ちください。\nそのお姿では冷えますでしょう。",
"text": "公爵\n暖かいお茶でも飲んでお待ちください。\nそのお姿では冷えますでしょう。"
},
{
"cmd": 80,
"str": 1,
"speaker": "UI",
"speaker_src": "ui",
"source": "赤汗",
"text": "赤汗"
},
{
"cmd": 81,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nあぅ……、ですから言わないでください……。",
"text": "セルリア\nあぅ……、ですから言わないでください……。"
},
{
"cmd": 87,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\n良かったですね。セルリア様。",
"text": "ローザ\n良かったですね。セルリア様。"
},
{
"cmd": 89,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nえぇ、大変なのはここからだけど……、\nそうね、少しだけ前進したわね。",
"text": "セルリア\nえぇ、大変なのはここからだけど……、\nそうね、少しだけ前進したわね。"
},
{
"cmd": 91,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nさて、折角ですし、お茶を頂きましょうか。",
"text": "セルリア\nさて、折角ですし、お茶を頂きましょうか。"
},
{
"cmd": 105,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nあら……、",
"text": "セルリア\nあら……、"
},
{
"cmd": 107,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\n急に眠気が……、疲れていたのかしら……。",
"text": "セルリア\n急に眠気が……、疲れていたのかしら……。"
},
{
"cmd": 114,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nローザ……そんなとこで寝ちゃ……、駄目……よ……。",
"text": "セルリア\nローザ……そんなとこで寝ちゃ……、駄目……よ……。"
},
{
"cmd": 125,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nん………………。",
"text": "ローザ\nん………………。"
},
{
"cmd": 126,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nこの味…………",
"text": "ローザ\nこの味…………"
},
{
"cmd": 127,
"str": 0,
"speaker": "ローザ",
"speaker_src": "literal_line1_lowconf",
"source": "ローザ\nセルリア様……、待っ…………",
"text": "ローザ\nセルリア様……、待っ…………"
},
{
"cmd": 128,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nローザどうしたのローザ",
"text": "セルリア\nローザどうしたのローザ"
},
{
"cmd": 132,
"str": 0,
"speaker": "セルリア",
"speaker_src": "literal_line1_lowconf",
"source": "セルリア\nあれ……、急に眠気が……、どうして…………。",
"text": "セルリア\nあれ……、急に眠気が……、どうして…………。"
}
]
}
]
}

Some files were not shown because too many files have changed in this diff Show more