Initial Commit (Archedio 90% TL)

This commit is contained in:
Dazed 2023-11-21 10:13:13 -06:00
commit aeb046f892
225 changed files with 3038080 additions and 0 deletions

15
.gitignore vendored Normal file
View file

@ -0,0 +1,15 @@
# Ignore all files
*.*
# Except
!*.json
!*.js
!*.zip
!*.7z
!*.csv
!*.ks
!.gitignore
!srp.pac
!README.md
# Images

49
README.md Normal file
View file

@ -0,0 +1,49 @@
# Apply Patch
1. Click Code
2. Click Download ZIP
3. Extract to game folder and Replace All.
# How To Contribute
TLDR 3 steps.
Fork the repository.
Make the changes.
Submit a pull request to the project owner.
If everything looks good and doesn't break things I'll merge it in.
Longer Version:
Things that are needed:
* [VSCode](https://code.visualstudio.com/) Make sure you check all the boxes for context menus. ![image](https://github.com/DazedMTL/Dungeon-With-Girl/assets/96628874/7a84b624-32fe-4845-a0f6-2b9f39795070)
* The Game
* [Git](https://git-scm.com/downloads) (Use the default for everything. Just keep clicking Next)
* Motivation to learn
Installation:
1. Fork the repo using the fork button at the top. Click Code > HTTPS > Copy URL.
2. Right click on the game folder and click 'Open with VSCode' (Shift+Right_Click if you are on Windows 11)
3. Click on the Source Control Button and click initialize repository.
![image](https://github.com/DazedMTL/Dungeon-With-Girl/assets/96628874/61e818e6-11f9-450d-9d7d-263d109dbf56)
4. At the top click on Terminal > New Terminal. Enter the following: `git clone [URL_YOU_COPIED_ABOVE]`.
5. Copy the contents of the new folder created with git clone into the game folder and replace all.
6. Your source control menu should be good to go and look like this.
![image](https://github.com/DazedMTL/Dungeon-With-Girl/assets/96628874/c19787a0-172d-4a08-a37a-e3b56e70e86a)
Now you are all setup, all you need to do is play the game and look for any changes that need to be made. Stuff like spelling errors, wrong names, inconsistencies, spacing issues, etc.
7. Use the FIND functionality to search for what you are trying to fix. For example if a character's name is wrong, type that into the search menu and start looking, then make the change. Try not to mess with any scripts or variables you might see.
![image](https://github.com/DazedMTL/Dungeon-With-Girl/assets/96628874/589eccaf-7f86-43f7-a917-7e6e477b381a)
8. After you are satisfied with your changes it's time to put in a PR. Go to source control to see all your changes. Add a message and click the `Commit` button to save them all.
![image](https://github.com/DazedMTL/Dungeon-With-Girl/assets/96628874/a9a8973b-bc01-4184-bea9-63a925d961a2)
8. Click Sync to push your changes to your fork. Now all that's left is to put in a pull request.
9. Go to Pull Requests > New Pull Requests. Look at the arrow, your fork should be pointing to the original repo (mine). Add in details on what you fixed and Submit. If everything looks good I'll merge it in and you would have successfully contributed.
Got questions? Just shoot me a message, more than happy to walk you through any of the tools.

12
package.json Normal file
View file

@ -0,0 +1,12 @@
{
"name": "",
"main": "www/index.html",
"js-flags": "--expose-gc",
"window": {
"title": "",
"toolbar": false,
"width": 816,
"height": 624,
"icon": "www/icon/icon.png"
}
}

1
www/boy.json Normal file

File diff suppressed because one or more lines are too long

147
www/data/Actors.json Normal file
View file

@ -0,0 +1,147 @@
[
null,
{
"id": 1,
"battlerName": "",
"characterIndex": 0,
"characterName": "syujinnkouwalk",
"classId": 2,
"equips": [
1,
3,
0,
0
],
"faceIndex": 0,
"faceName": "rikkaface",
"traits": [
{
"code": 52,
"dataId": 1,
"value": 0
}
],
"initialLevel": 1,
"maxLevel": 99,
"name": "Ricca",
"nickname": "",
"note": "<NogaugeTP>",
"profile": "The boxed daughter of the village vigilante. \nShe's determined to protect the village in place of her father."
},
{
"id": 2,
"battlerName": "",
"characterIndex": 0,
"characterName": "syujinnkouwalk",
"classId": 3,
"equips": [
4,
1,
0,
0
],
"faceIndex": 0,
"faceName": "sinaface",
"traits": [
{
"code": 52,
"dataId": 2,
"value": 0
}
],
"initialLevel": 1,
"maxLevel": 99,
"name": "Sina",
"nickname": "",
"note": "<NogaugeTP>",
"profile": "The daughter of a small farmer in the village.\nShe lost her mother when she was young and now lives with her father."
},
{
"id": 3,
"battlerName": "",
"characterIndex": 0,
"characterName": "syujinnkouwalk",
"classId": 4,
"equips": [
3,
2,
2,
0
],
"faceIndex": 0,
"faceName": "herenaface",
"traits": [
{
"code": 52,
"dataId": 3,
"value": 0
}
],
"initialLevel": 1,
"maxLevel": 99,
"name": "Helena",
"nickname": "",
"note": "<NogaugeTP>",
"profile": "A newlywed wife, but her husband is on the battlefield.\nIt's been her childhood dream to become a kind mother."
},
{
"id": 4,
"battlerName": "",
"characterIndex": 0,
"characterName": "syujinnkouwalk",
"classId": 5,
"equips": [
5,
4,
0,
0
],
"faceIndex": 0,
"faceName": "mikoface",
"traits": [
{
"code": 52,
"dataId": 4,
"value": 0
}
],
"initialLevel": 1,
"maxLevel": 99,
"name": "Miko",
"nickname": "",
"note": "<NogaugeTP>",
"profile": "Mysterious girl. One day she appeared in the village.\nEven though she was young, she mastered offensive magic."
},
{
"id": 5,
"battlerName": "",
"characterIndex": 0,
"characterName": "syujinnkouwalk2",
"classId": 1,
"equips": [
7,
5,
0
],
"faceIndex": 6,
"faceName": "",
"traits": [
{
"code": 51,
"dataId": 1,
"value": 1
},
{
"code": 52,
"dataId": 7,
"value": 1
}
],
"initialLevel": 1,
"maxLevel": 99,
"name": "Alto",
"nickname": "",
"note": "<NogaugeHP>\n<NogaugeMP>\n<NogaugeTP>",
"profile": ""
}
]

130674
www/data/Animations.json Normal file

File diff suppressed because it is too large Load diff

1034
www/data/Armors.json Normal file

File diff suppressed because it is too large Load diff

4532
www/data/Classes.json Normal file

File diff suppressed because it is too large Load diff

1184068
www/data/CommonEvents.json Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,45 @@
{
"Scene_Title": {
"WindowLayer": {
"0,Window_TitleCommand": {
"x": 533,
"y": 571,
"width": 240,
"height": 128,
"opacity": 255,
"hidden": false,
"_customFontSize": 24,
"_customPadding": 16,
"_customLineHeight": 32,
"_customBackOpacity": 140,
"_customBackFileName": "",
"_customFontFace": ""
}
}
},
"Scene_Map": {
"WindowLayer": {
"0,Window_Message": {
"x": 117,
"y": 540,
"width": 1050,
"height": 180,
"opacity": 255,
"hidden": false,
"_customFontSize": 24,
"_customPadding": "18",
"_customLineHeight": "36",
"_customBackOpacity": 140,
"_customBackFileName": "",
"_customFontFace": ""
}
},
"Scene_Map": {
"2,Sprite": {
"x": 360,
"y": 0
}
}
},
"Scene_Name": {}
}

1850
www/data/Enemies.json Normal file

File diff suppressed because it is too large Load diff

5079
www/data/Items.json Normal file

File diff suppressed because it is too large Load diff

1430
www/data/Map001.json Normal file

File diff suppressed because it is too large Load diff

35838
www/data/Map002.json Normal file

File diff suppressed because it is too large Load diff

68104
www/data/Map003.json Normal file

File diff suppressed because it is too large Load diff

43422
www/data/Map004.json Normal file

File diff suppressed because it is too large Load diff

35165
www/data/Map005.json Normal file

File diff suppressed because it is too large Load diff

32097
www/data/Map006.json Normal file

File diff suppressed because it is too large Load diff

20266
www/data/Map007.json Normal file

File diff suppressed because it is too large Load diff

2230
www/data/Map008.json Normal file

File diff suppressed because it is too large Load diff

8549
www/data/Map009.json Normal file

File diff suppressed because it is too large Load diff

2398
www/data/Map010.json Normal file

File diff suppressed because it is too large Load diff

15490
www/data/Map011.json Normal file

File diff suppressed because it is too large Load diff

2268
www/data/Map012.json Normal file

File diff suppressed because it is too large Load diff

8568
www/data/Map013.json Normal file

File diff suppressed because it is too large Load diff

48061
www/data/Map014.json Normal file

File diff suppressed because it is too large Load diff

71304
www/data/Map015.json Normal file

File diff suppressed because it is too large Load diff

4709
www/data/Map016.json Normal file

File diff suppressed because it is too large Load diff

2857
www/data/Map017.json Normal file

File diff suppressed because it is too large Load diff

1987
www/data/Map018.json Normal file

File diff suppressed because it is too large Load diff

10937
www/data/Map019.json Normal file

File diff suppressed because it is too large Load diff

2551
www/data/Map020.json Normal file

File diff suppressed because it is too large Load diff

26514
www/data/Map021.json Normal file

File diff suppressed because it is too large Load diff

34813
www/data/Map022.json Normal file

File diff suppressed because it is too large Load diff

7645
www/data/Map023.json Normal file

File diff suppressed because it is too large Load diff

20059
www/data/Map024.json Normal file

File diff suppressed because it is too large Load diff

21155
www/data/Map025.json Normal file

File diff suppressed because it is too large Load diff

2998
www/data/Map026.json Normal file

File diff suppressed because it is too large Load diff

31231
www/data/Map027.json Normal file

File diff suppressed because it is too large Load diff

19507
www/data/Map028.json Normal file

File diff suppressed because it is too large Load diff

87508
www/data/Map029.json Normal file

File diff suppressed because it is too large Load diff

43708
www/data/Map030.json Normal file

File diff suppressed because it is too large Load diff

7067
www/data/Map031.json Normal file

File diff suppressed because it is too large Load diff

7902
www/data/Map032.json Normal file

File diff suppressed because it is too large Load diff

64095
www/data/Map033.json Normal file

File diff suppressed because it is too large Load diff

35618
www/data/Map034.json Normal file

File diff suppressed because it is too large Load diff

8875
www/data/Map035.json Normal file

File diff suppressed because it is too large Load diff

7190
www/data/Map036.json Normal file

File diff suppressed because it is too large Load diff

5180
www/data/Map037.json Normal file

File diff suppressed because it is too large Load diff

8973
www/data/Map038.json Normal file

File diff suppressed because it is too large Load diff

1363
www/data/Map039.json Normal file

File diff suppressed because it is too large Load diff

354
www/data/MapInfos.json Normal file
View file

@ -0,0 +1,354 @@
[
null,
{
"id": 1,
"expanded": true,
"name": "MAP001",
"order": 1,
"parentId": 0,
"scrollX": 534,
"scrollY": 314
},
{
"id": 2,
"expanded": true,
"name": "沼地",
"order": 18,
"parentId": 1,
"scrollX": 1386,
"scrollY": 1618
},
{
"id": 3,
"expanded": true,
"name": "村1",
"order": 2,
"parentId": 1,
"scrollX": 2041,
"scrollY": 2745
},
{
"id": 4,
"expanded": true,
"name": "山林",
"order": 21,
"parentId": 1,
"scrollX": 1386,
"scrollY": 1238
},
{
"id": 5,
"expanded": true,
"name": "沼地の洞窟",
"order": 19,
"parentId": 2,
"scrollX": 1866,
"scrollY": 1618
},
{
"id": 6,
"expanded": false,
"name": "沼地の洞窟2",
"order": 20,
"parentId": 5,
"scrollX": 1290,
"scrollY": 1282
},
{
"id": 7,
"expanded": false,
"name": "村長の家",
"order": 3,
"parentId": 3,
"scrollX": 534,
"scrollY": 794
},
{
"id": 8,
"expanded": true,
"name": "シーナの家",
"order": 5,
"parentId": 3,
"scrollX": 534,
"scrollY": 314
},
{
"id": 9,
"expanded": false,
"name": "小屋",
"order": 6,
"parentId": 8,
"scrollX": 542,
"scrollY": 310
},
{
"id": 10,
"expanded": true,
"name": "ヘレナの家1",
"order": 7,
"parentId": 3,
"scrollX": 542,
"scrollY": 310
},
{
"id": 11,
"expanded": true,
"name": "リッカの家",
"order": 4,
"parentId": 3,
"scrollX": 534,
"scrollY": 706
},
{
"id": 12,
"expanded": true,
"name": "オープニング",
"order": 13,
"parentId": 1,
"scrollX": 534,
"scrollY": 310
},
{
"id": 13,
"expanded": false,
"name": "ヘレナの家2",
"order": 8,
"parentId": 10,
"scrollX": 542,
"scrollY": 310
},
{
"id": 14,
"expanded": true,
"name": "平地",
"order": 15,
"parentId": 1,
"scrollX": 1268,
"scrollY": 2098
},
{
"id": 15,
"expanded": true,
"name": "夕暮れの村1",
"order": 14,
"parentId": 1,
"scrollX": 1268,
"scrollY": 2338
},
{
"id": 16,
"expanded": true,
"name": "ゴブリン洞窟小",
"order": 16,
"parentId": 14,
"scrollX": 534,
"scrollY": 650
},
{
"id": 17,
"expanded": false,
"name": "民家1",
"order": 11,
"parentId": 3,
"scrollX": 534,
"scrollY": 314
},
{
"id": 18,
"expanded": false,
"name": "民家2",
"order": 10,
"parentId": 3,
"scrollX": 534,
"scrollY": 310
},
{
"id": 19,
"expanded": false,
"name": "村の洞窟",
"order": 12,
"parentId": 3,
"scrollX": 542,
"scrollY": 310
},
{
"id": 20,
"expanded": false,
"name": "民家3",
"order": 9,
"parentId": 3,
"scrollX": 534,
"scrollY": 314
},
{
"id": 21,
"expanded": false,
"name": "ゴブリン洞窟大",
"order": 17,
"parentId": 14,
"scrollX": 914,
"scrollY": 1618
},
{
"id": 22,
"expanded": true,
"name": "廃村",
"order": 24,
"parentId": 1,
"scrollX": 1354,
"scrollY": 302
},
{
"id": 23,
"expanded": true,
"name": "END-ひとり",
"order": 30,
"parentId": 0,
"scrollX": 899,
"scrollY": 658
},
{
"id": 24,
"expanded": true,
"name": "枯れ地の洞窟1",
"order": 25,
"parentId": 22,
"scrollX": 534,
"scrollY": 302
},
{
"id": 25,
"expanded": true,
"name": "枯れ地の洞窟2",
"order": 26,
"parentId": 24,
"scrollX": 534,
"scrollY": 302
},
{
"id": 26,
"expanded": false,
"name": "枯れ地の洞窟3",
"order": 27,
"parentId": 24,
"scrollX": 534,
"scrollY": 314
},
{
"id": 27,
"expanded": true,
"name": "茂みの洞窟",
"order": 22,
"parentId": 4,
"scrollX": 1386,
"scrollY": 302
},
{
"id": 28,
"expanded": false,
"name": "茂みの洞窟2",
"order": 23,
"parentId": 27,
"scrollX": 534,
"scrollY": 310
},
{
"id": 29,
"expanded": true,
"name": "地下洞窟",
"order": 28,
"parentId": 1,
"scrollX": 1173,
"scrollY": 514
},
{
"id": 30,
"expanded": false,
"name": "地下洞窟2",
"order": 29,
"parentId": 29,
"scrollX": 534,
"scrollY": 466
},
{
"id": 31,
"expanded": true,
"name": "END-ヤト",
"order": 31,
"parentId": 23,
"scrollX": 1092,
"scrollY": 622
},
{
"id": 32,
"expanded": false,
"name": "END-連行",
"order": 32,
"parentId": 23,
"scrollX": 534,
"scrollY": 658
},
{
"id": 33,
"expanded": true,
"name": "村ー出発の朝",
"order": 36,
"parentId": 0,
"scrollX": 704,
"scrollY": 1728
},
{
"id": 34,
"expanded": true,
"name": "平地2",
"order": 37,
"parentId": 33,
"scrollX": 1181,
"scrollY": 2098
},
{
"id": 35,
"expanded": true,
"name": "END-ヒロイン",
"order": 33,
"parentId": 23,
"scrollX": 1274,
"scrollY": 642
},
{
"id": 36,
"expanded": true,
"name": "END-ヘレナB",
"order": 34,
"parentId": 35,
"scrollX": 1245,
"scrollY": 658
},
{
"id": 37,
"expanded": false,
"name": "村長の家2",
"order": 38,
"parentId": 33,
"scrollX": 534,
"scrollY": 794
},
{
"id": 38,
"expanded": true,
"name": "END-真エンド",
"order": 35,
"parentId": 23,
"scrollX": 1282,
"scrollY": 658
},
{
"id": 39,
"expanded": false,
"name": "MAP039",
"order": 39,
"parentId": 0,
"scrollX": 534,
"scrollY": 314
}
]

7973
www/data/Skills.json Normal file

File diff suppressed because it is too large Load diff

2258
www/data/States.json Normal file

File diff suppressed because it is too large Load diff

2139
www/data/System.json Normal file

File diff suppressed because it is too large Load diff

65691
www/data/Tilesets.json Normal file

File diff suppressed because it is too large Load diff

500772
www/data/Troops.json Normal file

File diff suppressed because it is too large Load diff

322
www/data/Weapons.json Normal file
View file

@ -0,0 +1,322 @@
[
null,
{
"id": 1,
"animationId": 6,
"description": "It was made by Ricca's father, imitating the swords used in the national army. \nIt cost a fair amount of money, so the quality was decent.",
"etypeId": 1,
"traits": [
{
"code": 31,
"dataId": 1,
"value": 0
},
{
"code": 22,
"dataId": 0,
"value": 0
}
],
"iconIndex": 97,
"name": "National Army Light Infantry Sword (Replica)",
"note": "",
"params": [
0,
0,
10,
0,
0,
0,
0,
0
],
"price": 0,
"wtypeId": 2
},
{
"id": 2,
"animationId": 0,
"description": "",
"etypeId": 1,
"traits": [
{
"code": 31,
"dataId": 1,
"value": 0
},
{
"code": 22,
"dataId": 0,
"value": 0
}
],
"iconIndex": 0,
"name": "",
"note": "",
"params": [
0,
0,
0,
0,
0,
0,
0,
0
],
"price": 0,
"wtypeId": 0
},
{
"id": 3,
"animationId": 1,
"description": "A wooden stick that looks like a magic wand. Used for physical attacks.\nMagic can be used without wands.",
"etypeId": 1,
"traits": [
{
"code": 31,
"dataId": 1,
"value": 0
},
{
"code": 22,
"dataId": 0,
"value": 0
}
],
"iconIndex": 101,
"name": "Magic wand stick",
"note": "",
"params": [
0,
0,
10,
0,
0,
0,
0,
0
],
"price": 0,
"wtypeId": 6
},
{
"id": 4,
"animationId": 11,
"description": "Sina's mother's memento from when she was a hunter. \nIt's a nice bow, but it's quite old.",
"etypeId": 1,
"traits": [
{
"code": 31,
"dataId": 1,
"value": 0
},
{
"code": 22,
"dataId": 0,
"value": 0
}
],
"iconIndex": 102,
"name": "Keepsake bow",
"note": "",
"params": [
0,
0,
10,
0,
0,
0,
0,
0
],
"price": 500,
"wtypeId": 7
},
{
"id": 5,
"animationId": 1,
"description": "A huge book that Miko always carries with her.",
"etypeId": 1,
"traits": [
{
"code": 31,
"dataId": 1,
"value": 0
},
{
"code": 22,
"dataId": 0,
"value": 0
}
],
"iconIndex": 121,
"name": "Giant book",
"note": "",
"params": [
0,
0,
10,
0,
0,
0,
0,
0
],
"price": 0,
"wtypeId": 3
},
{
"id": 6,
"animationId": 0,
"description": "",
"etypeId": 1,
"traits": [
{
"code": 31,
"dataId": 1,
"value": 0
},
{
"code": 22,
"dataId": 0,
"value": 0
}
],
"iconIndex": 0,
"name": "",
"note": "",
"params": [
0,
0,
0,
0,
0,
0,
0,
0
],
"price": 0,
"wtypeId": 0
},
{
"id": 7,
"animationId": 0,
"description": "Self-defense knives issued to government officials.",
"etypeId": 1,
"traits": [],
"iconIndex": 96,
"name": "Self defense knife",
"note": "",
"params": [
0,
0,
0,
0,
0,
0,
0,
0
],
"price": 0,
"wtypeId": 1
},
{
"id": 8,
"animationId": 0,
"description": "",
"etypeId": 1,
"traits": [
{
"code": 31,
"dataId": 1,
"value": 0
},
{
"code": 22,
"dataId": 0,
"value": 0
}
],
"iconIndex": 0,
"name": "",
"note": "",
"params": [
0,
0,
0,
0,
0,
0,
0,
0
],
"price": 0,
"wtypeId": 0
},
{
"id": 9,
"animationId": 0,
"description": "",
"etypeId": 1,
"traits": [
{
"code": 31,
"dataId": 1,
"value": 0
},
{
"code": 22,
"dataId": 0,
"value": 0
}
],
"iconIndex": 0,
"name": "",
"note": "",
"params": [
0,
0,
0,
0,
0,
0,
0,
0
],
"price": 0,
"wtypeId": 0
},
{
"id": 10,
"animationId": 0,
"description": "",
"etypeId": 1,
"traits": [
{
"code": 31,
"dataId": 1,
"value": 0
},
{
"code": 22,
"dataId": 0,
"value": 0
}
],
"iconIndex": 0,
"name": "",
"note": "",
"params": [
0,
0,
0,
0,
0,
0,
0,
0
],
"price": 0,
"wtypeId": 0
}
]

1
www/girl.json Normal file

File diff suppressed because one or more lines are too long

1
www/gyousyou.json Normal file

File diff suppressed because one or more lines are too long

1
www/haha1.json Normal file

File diff suppressed because one or more lines are too long

1
www/herena.json Normal file

File diff suppressed because one or more lines are too long

963
www/js/Quests.json Normal file
View file

@ -0,0 +1,963 @@
{
"name": "YEP_X_MoreQuests1",
"status": true,
"description": "v1.00 (要YEP_QuestJournal)クエスト101から1000を追加します。",
"parameters": {
"---クエスト 101 から 200---": "",
"Category: 101 to 200": "\\c[14]まっとうな願望",
"難易度101 to 200": "\\i[87]\\i[87]\\i[87]",
"From: 101 to 200": "NPCの名前",
"Location: 101 to 200": "NPCの場所",
"Quest 101": "{\"Title\":\"■■Story■■\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\Knowing that Alto is just a scholar, Rikka feels uneasy.\\\\\\\\It's a secret that the thought of what kind of expression she would make if she were attacked by a goblin crossed his mind.\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"Witness Rikka being given a creampie by goblins.\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x1\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 102": "{\"Title\":\"Resolve the issue of the monsters violent behavior.\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"It seems that the monsters are becoming more violent in the vicinity of this village.\\\\\\\\Especially women are being attacked.\\\\\\\\nI was sent as a monster scholar from the imperial capital, but the reaction has been disappointing...\\\\\\\\nI want to do my best to help solve the incident and show them what I'm capable of!\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"Determine the cause of the monsters violent behavior and resolve it.\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x10\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 103": "{\"Title\":\"ゴブリン退治\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"村の南でゴブリンが増殖しているようだ。\\\\\\\\nリッカはゴブリン退治に張り切っている。\\\\\\\\n当初は戦闘に同行するつもりはなかったが、女の子だけで\\\\\\\\n行かせるのもさすがに気が引ける。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"ゴブリンの巣を見つけて退治・調査する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x4\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 104": "{\"Title\":\"街道の安全\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"村の東側の湿地の先には街道があり、交通の要衝らしい。\\\\\\\\n魔物たちを一掃して、増殖スピードを抑えたい。\\\\\\\\n凶暴化の原因の調査も忘れずに。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"エビルプラントの巣を見つけ出し、退治・調査する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x4\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 105": "{\"Title\":\"食料の確保\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"村の北の山林が食料採集の場として使われているらしい。\\\\\\\\n魔物が増殖しすぎると、村の食料事情が厳しくなってくるという\\\\\\\\n調査をしつつ、魔物の数も減らしたい。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"巨大蜘蛛の巣を見つけ出し、退治・調査する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x4\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 106": "{\"Title\":\"黒い影の足取り\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"ミコがさらわれかけた。\\\\\\\\n犯人は魔物の凶暴化と関わっているのだろうか、、、\\\\\\\\n彼は村の西の廃村の方向に逃げた。放っておくわけには\\\\\\\\nいかない。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"廃村で怪しい人物の足取りを追う\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x4\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 107": "{\"Title\":\"魔犬を片づけておこう\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"廃村の洞窟に魔犬をたくさん残してきた。\\\\\\\\nそのままにはしておけないので、片付けに向かおう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"枯れ地の洞窟に残してきた魔犬を始末する。\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x4\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 108": "{\"Title\":\"隠れ家はどこ?\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"ここに来るまでミコがいた場所が、魔物を操る犯人の隠れ家\\\\\\\\nかもしれない。\\\\\\\\n情報は少ないが、ミコの記憶を頼りに探し出そう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"犯人のアジトの発見\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x4\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 109": "{\"Title\":\"敵地へ\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"怪しい人物の本拠地は見つかった。\\\\\\\\n事件の解決のためには奥に進むしかない。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"奥に進んで犯人を追い詰める\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x4\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 110": "{\"Title\":\"ここからだ\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"事件の原因の犯人は確保した。\\\\\\\\n魔物が落ち着くのも時間の問題だろう。\\\\\\\\nしかし、本来の仕事はここからだ。\\\\\\\\n研究者としてヤトの研究の全容を解明したい。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"ヤトの研究を調査する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x4\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 111": "",
"Quest 112": "",
"Quest 113": "",
"Quest 114": "",
"Quest 115": "",
"Quest 116": "",
"Quest 117": "",
"Quest 118": "",
"Quest 119": "",
"Quest 120": "",
"Quest 121": "{\"Title\":\"■■急所系■■\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\Knowing that Alto is just a scholar, Rikka feels uneasy.\\\\\\\\nだからといってゴブリンに襲われたら彼女はどんな顔をするのだろうと、そんな考えがよぎったのは秘密だ。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"リッカがゴブリンに中出しされるのを目の当たりにする\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x1\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 122": "{\"Title\":\"戦闘で何か役に立ちたい\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"戦闘中見ているだけというのが、何とも居心地が悪い。\\\\\\\\n魔物の知識を活かして何か僕に手伝えることはないだろうか。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"ゴブリンを研究し、戦闘で手伝えることを見つける。\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 123": "{\"Title\":\"エビルプラントの急所\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"エビルプラントの急所を研究し、すきをつくを習得する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 124": "{\"Title\":\"巨大蜘蛛の急所\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"巨大蜘蛛の急所を研究し、すきをつくを習得する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 125": "{\"Title\":\"魔犬の急所\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"魔犬の急所を研究し、すきをつくを習得する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 126": "{\"Title\":\"ミノタウロスの急所\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"ミノタウロスの急所を研究し、すきをつくを習得する\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 127": "",
"Quest 128": "",
"Quest 129": "",
"Quest 130": "",
"Quest 131": "{\"Title\":\"■■リッカ■■\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\Knowing that Alto is just a scholar, Rikka feels uneasy.\\\\\\\\nだからといってゴブリンに襲われたら彼女はどんな顔をするのだろうと、そんな考えがよぎったのは秘密だ。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"リッカがゴブリンに中出しされるのを目の当たりにする\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x1\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 132": "{\"Title\":\"リッカをゴブリンから救う\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"さすがに、ゴブリンに襲われているリッカなんて見たくない。\\\\\\\\nそれに救出出来たら、リッカの当たりも優しくなるかも、、、\\\\\\\\n\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"すきをつくでゴブリン挿入前のリッカを救出する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 133": "{\"Title\":\"リッカをエビルプラントから救う\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"エビルプラントに身体を好きにされるなんてさぞ不気味だろう。\\\\\\\\nもしリッカが捕まったら、助け出ししてやらなければ、、、\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"すきをつくでエビルプラント挿入前のリッカを救出する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 134": "{\"Title\":\"リッカを巨大蜘蛛から救う\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"あんな硬そうで尖ったものに貫かれたらどうなってしまうのか。\\\\\\\\nリッカのそんな姿は見たくない。救い出さねば\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"すきをつくで巨大蜘蛛挿入前のリッカを救出する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 135": "{\"Title\":\"リッカを魔犬から救う\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"あんな獣に犬のように犯されるリッカは見たくない。\\\\\\\\nそれに、救い出して、彼女に感謝されたい、、、\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"すきをつくで魔犬挿入前のリッカを救出する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 136": "{\"Title\":\"リッカをミノタウロスから救う\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"あんなムキムキに華奢なリッカが蹂躙されるところなんて、\\\\\\\\nとても見ていられない。\\\\\\\\n何としても、助けなければ、、\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"すきをつくでミノタウロス挿入前のリッカを救出する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 137": "",
"Quest 138": "",
"Quest 139": "{\"Title\":\"リッカの喜ぶ顔\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"いつもはつっけんどんなリッカになにか好きなものを渡して、\\\\\\\\nどんな反応をするのか見てみたい。\\\\\\\\n\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"リッカにリッカの好きなものをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x1\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 140": "",
"Quest 141": "{\"Title\":\"もっとリッカの喜ぶ顔1\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"リッカに特に好きなものを渡して、会話を広げたい。\\\\\\\\n彼女が力を入れていることや、意外な一面から好みを探ろう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"リッカにリッカの大好きな特定のアイテムをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 142": "{\"Title\":\"もっとリッカの喜ぶ顔2\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"リッカに特に好きなものを渡して、会話を広げたい。\\\\\\\\n彼女が力を入れていることや、意外な一面から好みを探ろう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"リッカにリッカの大好きな特定のアイテムをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 143": "{\"Title\":\"もっとリッカの喜ぶ顔3\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"リッカに特に好きなものを渡して、会話を広げたい。\\\\\\\\n彼女が力を入れていることや、意外な一面から好みを探ろう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"リッカにリッカの大好きな特定のアイテムをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 144": "{\"Title\":\"もっとリッカの喜ぶ顔4\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"リッカに特に好きなものを渡して、会話を広げたい。\\\\\\\\n彼女が力を入れていることや、意外な一面から好みを探ろう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"リッカにリッカの大好きな特定のアイテムをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 145": "{\"Title\":\"もっとリッカの喜ぶ顔5\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"リッカに特に好きなものを渡して、会話を広げたい。\\\\\\\\n彼女が力を入れていることや、意外な一面から好みを探ろう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"リッカにリッカの大好きな特定のアイテムをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 146": "{\"Title\":\"もっとリッカの喜ぶ顔6\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"リッカに特に好きなものを渡して、会話を広げたい。\\\\\\\\n彼女が力を入れていることや、意外な一面から好みを探ろう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"リッカにリッカの大好きな特定のアイテムをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 147": "{\"Title\":\"もっとリッカの喜ぶ顔7\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"リッカに特に好きなものを渡して、会話を広げたい。\\\\\\\\n彼女が力を入れていることや、意外な一面から好みを探ろう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"リッカにリッカの大好きな特定のアイテムをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 148": "",
"Quest 149": "",
"Quest 150": "",
"Quest 151": "{\"Title\":\"リッカに特別なものを1\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"リッカがほんとうに喜ぶものはなんだろう。\\\\\\\\n普段の会話から、彼女が欲しているものを探ろう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"リッカに特別なものをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x3\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 152": "{\"Title\":\"リッカに特別なものを2\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"リッカがほんとうに喜ぶものはなんだろう。\\\\\\\\n普段の会話から、彼女が欲しているものを探ろう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"リッカに特別なものをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x3\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 153": "",
"Quest 154": "",
"Quest 155": "",
"Quest 156": "",
"Quest 157": "",
"Quest 158": "",
"Quest 159": "",
"Quest 160": "",
"Quest 161": "{\"Title\":\"■■シーナ■■\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\Knowing that Alto is just a scholar, Rikka feels uneasy.\\\\\\\\nだからといってゴブリンに襲われたら彼女はどんな顔をするのだろうと、そんな考えがよぎったのは秘密だ。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"リッカがゴブリンに中出しされるのを目の当たりにする\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x1\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 162": "{\"Title\":\"シーナをゴブリンから救う\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"ただでさえ怖がっているシーナがゴブリンに犯されでもしたら、、\\\\\\\\nここは、自分が守ってやらねば、、\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"すきをつくでゴブリン挿入前のシーナを救出する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 163": "{\"Title\":\"シーナをエビルプラントから救う\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"エビルプラントにもみくちゃに犯されて泣いているシーナなんて\\\\\\\\n見たくない。取り返しのつかなくなる前に助けたい\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"すきをつくでエビルプラント挿入前のシーナを救出する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 164": "{\"Title\":\"シーナを巨大蜘蛛から救う\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"シーナは小さな虫も怖がってべそをかいていた。\\\\\\\\nあんな巨大なものに犯されでもしたら、大変なことだ。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"すきをつくで巨大蜘蛛挿入前のシーナを救出する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 165": "{\"Title\":\"シーナを魔犬から救う\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"魔犬に身体を石にされ貫かれたら、シーナにはパニックになって\\\\\\\\n耐えられないだろう。その前になんとかしたい。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"すきをつくで魔犬挿入前のシーナを救出する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 166": "{\"Title\":\"シーナをミノタウロスから救う\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"恐怖の象徴の化け物に犯されたら、\\\\\\\\nシーナは身体だけではなく、心も耐えられないだろう。\\\\\\\\nそうなる前に救い出したい。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"すきをつくでミノタウロス挿入前のシーナを救出する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 167": "",
"Quest 168": "",
"Quest 169": "{\"Title\":\"シーナの喜ぶ顔\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"出会いからシーナの泣き顔ばかり見ている。\\\\\\\\nシーナの好きなものをプレゼントして、\\\\\\\\n笑顔になったところも見たい。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"シーナにシーナの好きなものをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x1\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 170": "",
"Quest 171": "{\"Title\":\"もっとシーナの喜ぶ顔1\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"シーナがもっと喜ぶものを渡して、新たな話題を作りたい。\\\\\\\\n会話から彼女の好みや悩みごと、必要なものを知ろう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"シーナにシーナの大好きな特定のアイテムをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 172": "{\"Title\":\"もっとシーナの喜ぶ顔2\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"シーナがもっと喜ぶものを渡して、新たな話題を作りたい。\\\\\\\\n会話から彼女の好みや悩みごと、必要なものを知ろう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"シーナにシーナの大好きな特定のアイテムをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 173": "{\"Title\":\"もっとシーナの喜ぶ顔3\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"シーナがもっと喜ぶものを渡して、新たな話題を作りたい。\\\\\\\\n会話から彼女の好みや悩みごと、必要なものを知ろう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"シーナにシーナの大好きな特定のアイテムをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 174": "{\"Title\":\"もっとシーナの喜ぶ顔4\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"シーナがもっと喜ぶものを渡して、新たな話題を作りたい。\\\\\\\\n会話から彼女の好みや悩みごと、必要なものを知ろう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"シーナにシーナの大好きな特定のアイテムをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 175": "{\"Title\":\"もっとシーナの喜ぶ顔5\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"シーナがもっと喜ぶものを渡して、新たな話題を作りたい。\\\\\\\\n会話から彼女の好みや悩みごと、必要なものを知ろう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"シーナにシーナの大好きな特定のアイテムをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 176": "{\"Title\":\"もっとシーナの喜ぶ顔6\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"シーナがもっと喜ぶものを渡して、新たな話題を作りたい。\\\\\\\\n会話から彼女の好みや悩みごと、必要なものを知ろう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"シーナにシーナの大好きな特定のアイテムをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 177": "{\"Title\":\"もっとシーナの喜ぶ顔7\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"シーナがもっと喜ぶものを渡して、新たな話題を作りたい。\\\\\\\\n会話から彼女の好みや悩みごと、必要なものを知ろう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"シーナにシーナの大好きな特定のアイテムをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 178": "{\"Title\":\"もっとシーナの喜ぶ顔8\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"シーナがもっと喜ぶものを渡して、新たな話題を作りたい。\\\\\\\\n会話から彼女の好みや悩みごと、必要なものを知ろう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"シーナにシーナの大好きな特定のアイテムをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 179": "",
"Quest 180": "",
"Quest 181": "{\"Title\":\"シーナに特別なものを1\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"もっともっとシーナの笑顔が見たい。\\\\\\\\nシーナが心から笑顔になるものはなんだろう。\\\\\\\\n何がいいか普段の会話からヒントを探そう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"シーナに特別なものをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x3\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 182": "{\"Title\":\"シーナに特別なものを2\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"もっともっとシーナの笑顔が見たい。\\\\\\\\nシーナが心から笑顔になるものはなんだろう。\\\\\\\\n何がいいか普段の会話からヒントを探そう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"シーナに特別なものをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x3\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 183": "",
"Quest 184": "",
"Quest 185": "",
"Quest 186": "",
"Quest 187": "",
"Quest 188": "",
"Quest 189": "",
"Quest 190": "",
"Quest 191": "",
"Quest 192": "",
"Quest 193": "",
"Quest 194": "",
"Quest 195": "",
"Quest 196": "",
"Quest 197": "",
"Quest 198": "",
"Quest 199": "",
"Quest 200": "",
"---クエスト 201 から 300---": "",
"Category: 201 to 300": "\\c[14]まっとうな願望",
"難易度201 to 300": "\\i[87]\\i[87]\\i[87]",
"From: 201 to 300": "NPCの名前",
"Location: 201 to 300": "NPCの場所",
"Quest 201": "{\"Title\":\"■■ヘレナ■■\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\Knowing that Alto is just a scholar, Rikka feels uneasy.\\\\\\\\nだからといってゴブリンに襲われたら彼女はどんな顔をするのだろうと、そんな考えがよぎったのは秘密だ。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"リッカがゴブリンに中出しされるのを目の当たりにする\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x1\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 202": "{\"Title\":\"ヘレナをゴブリンから救う\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"ヘレナは人妻だ。\\\\\\\\nゴブリンなんかに身体を許させるわけにはいかない。\\\\\\\\n責任をもって阻止しなければ。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"すきをつくでゴブリン挿入前のヘレナを救出する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 203": "{\"Title\":\"ヘレナをエビルプラントから救う\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"草木を愛でるヘレナが、植物の怪物に犯されるべきじゃない。\\\\\\\\nできることは全力でしたい。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"すきをつくでエビルプラント挿入前のヘレナを救出する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 204": "{\"Title\":\"ヘレナを巨大蜘蛛から救う\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"あの槍のような凶器に貫かれる前に、ヘレナを救出しよう。\\\\\\\\nそして、いっぱい褒められよう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"すきをつくで巨大蜘蛛挿入前のヘレナを救出する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 205": "{\"Title\":\"ヘレナを魔犬から救う\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"人妻がみじめに四つん這いになって犯されるなんてあんまりだ。\\\\\\\\nすきを見て、しっかり救出しよう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"すきをつくで魔犬挿入前のヘレナを救出する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 206": "{\"Title\":\"ヘレナをミノタウロスから救う\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"ヘレナのおおらかな身体も心でも、\\\\\\\\nミタウロスに犯されたらきっと壊れてしまうだろう。\\\\\\\\nそんなことにはさせたくない。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"すきをつくでミノタウロス挿入前のヘレナを救出する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 207": "",
"Quest 208": "",
"Quest 209": "{\"Title\":\"ヘレナの喜ぶ顔\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"いつもニコニコしているヘレナ。\\\\\\\\nヘレナの好きなものをあげたらどんなに喜んでくれるだろう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"ヘレナにヘレナの好きなものをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x1\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 210": "",
"Quest 211": "{\"Title\":\"もっとヘレナの喜ぶ顔1\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"ヘレナはプレゼントなんてなくても、いつも優しく笑ってくれる。\\\\\\\\nだからこそ、彼女の好きなものを渡したいのだ。\\\\\\\\n普段の会話からアンテナを張ろう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"ヘレナにヘレナの大好きな特定のアイテムをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 212": "{\"Title\":\"もっとヘレナの喜ぶ顔2\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"ヘレナはプレゼントなんてなくても、いつも優しく笑ってくれる。\\\\\\\\nだからこそ、彼女の好きなものを渡したいのだ。\\\\\\\\n普段の会話からアンテナを張ろう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"ヘレナにヘレナの大好きな特定のアイテムをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 213": "{\"Title\":\"もっとヘレナの喜ぶ顔3\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"ヘレナはプレゼントなんてなくても、いつも優しく笑ってくれる。\\\\\\\\nだからこそ、彼女の好きなものを渡したいのだ。\\\\\\\\n普段の会話からアンテナを張ろう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"ヘレナにヘレナの大好きな特定のアイテムをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 214": "{\"Title\":\"もっとヘレナの喜ぶ顔4\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"ヘレナはプレゼントなんてなくても、いつも優しく笑ってくれる。\\\\\\\\nだからこそ、彼女の好きなものを渡したいのだ。\\\\\\\\n普段の会話からアンテナを張ろう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"ヘレナにヘレナの大好きな特定のアイテムをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 215": "{\"Title\":\"もっとヘレナの喜ぶ顔5\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"ヘレナはプレゼントなんてなくても、いつも優しく笑ってくれる。\\\\\\\\nだからこそ、彼女の好きなものを渡したいのだ。\\\\\\\\n普段の会話からアンテナを張ろう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"ヘレナにヘレナの大好きな特定のアイテムをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 216": "{\"Title\":\"もっとヘレナの喜ぶ顔6\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"ヘレナはプレゼントなんてなくても、いつも優しく笑ってくれる。\\\\\\\\nだからこそ、彼女の好きなものを渡したいのだ。\\\\\\\\n普段の会話からアンテナを張ろう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"ヘレナにヘレナの大好きな特定のアイテムをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 217": "{\"Title\":\"もっとヘレナの喜ぶ顔7\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"ヘレナはプレゼントなんてなくても、いつも優しく笑ってくれる。\\\\\\\\nだからこそ、彼女の好きなものを渡したいのだ。\\\\\\\\n普段の会話からアンテナを張ろう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"ヘレナにヘレナの大好きな特定のアイテムをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 218": "{\"Title\":\"もっとヘレナの喜ぶ顔8\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"ヘレナはプレゼントなんてなくても、いつも優しく笑ってくれる。\\\\\\\\nだからこそ、彼女の好きなものを渡したいのだ。\\\\\\\\n普段の会話からアンテナを張ろう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"ヘレナにヘレナの大好きな特定のアイテムをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 219": "{\"Title\":\"もっとヘレナの喜ぶ顔9\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"ヘレナはプレゼントなんてなくても、いつも優しく笑ってくれる。\\\\\\\\nだからこそ、彼女の好きなものを渡したいのだ。\\\\\\\\n普段の会話からアンテナを張ろう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"ヘレナにヘレナの大好きな特定のアイテムをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 220": "",
"Quest 221": "{\"Title\":\"ヘレナに特別なものを1\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"もっともっとヘレナを喜ばせたい。\\\\\\\\nそして見たことのないヘレナを見たい。\\\\\\\\nヘレナの好きそうなものが手に入らないか、注意しておこう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"ヘレナに特別なものをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x3\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 222": "{\"Title\":\"ヘレナに特別なものを2\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"もっともっとヘレナを喜ばせたい。\\\\\\\\nそして見たことのないヘレナを見たい。\\\\\\\\nヘレナの好きそうなものが手に入らないか、注意しておこう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"ヘレナに特別なものをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x3\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 223": "",
"Quest 224": "",
"Quest 225": "",
"Quest 226": "",
"Quest 227": "",
"Quest 228": "",
"Quest 229": "",
"Quest 230": "",
"Quest 231": "{\"Title\":\"■■ミコ■■\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\Knowing that Alto is just a scholar, Rikka feels uneasy.\\\\\\\\nだからといってゴブリンに襲われたら彼女はどんな顔をするのだろうと、そんな考えがよぎったのは秘密だ。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"リッカがゴブリンに中出しされるのを目の当たりにする\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x1\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 232": "{\"Title\":\"ミコをゴブリンから救う\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"あどけないミコの身体をゴブリンにあけ渡すわけにはいかない。\\\\\\\\n何としても阻止だ。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"すきをつくでゴブリン挿入前のミコを救出する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 233": "{\"Title\":\"ミコをエビルプラントから救う\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"ミコが植物のツタに無感情に犯されるなんて、許せない。\\\\\\\\nミコの小さな身体を責任をもって守ろう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"すきをつくでエビルプラント挿入前のミコを救出する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 234": "{\"Title\":\"ミコを巨大蜘蛛から救う\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"あの歳で虫に犯される経験など、絶対にするべきではない。\\\\\\\\nすみやかに救出だ、、\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"すきをつくで巨大蜘蛛挿入前のミコを救出する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 235": "{\"Title\":\"ミコを魔犬から救う\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"あんなおそろしい形のものに、ミコの身体はきっと耐えられない。\\\\\\\\n何としても救い出そう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"すきをつくで魔犬挿入前のミコを救出する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 236": "{\"Title\":\"ミコをミノタウロスから救う\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"そもそもこの体格差で、ミノタウロスは犯したくても\\\\\\\\n犯せないのではないだろうか\\\\\\\\nどちらにしろとても危険だ。助け出さないと。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"すきをつくでミノタウロス挿入前のミコを救出する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 237": "",
"Quest 238": "",
"Quest 239": "{\"Title\":\"ミコの喜ぶ顔\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"ミコは謎が多い子だ。\\\\\\\\n他の女性が喜ぶようなもので喜ぶだろうか\\\\\\\\n好きなものを探っていきたい。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"ミコにミコの好きなものをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x1\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 240": "",
"Quest 241": "{\"Title\":\"もっとミコの喜ぶ顔1\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"ミコの喜ぶツボは難しい、、、\\\\\\\\nしかしだからこそ、ミコのいい反応が欲しくなってしまう。\\\\\\\\nとりあえずいろいろあげてみるか、、、\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"ミコにミコの大好きな特定のアイテムをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 242": "{\"Title\":\"もっとミコの喜ぶ顔2\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"ミコの喜ぶツボは難しい、、、\\\\\\\\nしかしだからこそ、ミコのいい反応が欲しくなってしまう。\\\\\\\\nとりあえずいろいろあげてみるか、、、\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"ミコにミコの大好きな特定のアイテムをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 243": "{\"Title\":\"もっとミコの喜ぶ顔3\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"ミコの喜ぶツボは難しい、、、\\\\\\\\nしかしだからこそ、ミコのいい反応が欲しくなってしまう。\\\\\\\\nとりあえずいろいろあげてみるか、、、\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"ミコにミコの大好きな特定のアイテムをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 244": "{\"Title\":\"もっとミコの喜ぶ顔4\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"ミコの喜ぶツボは難しい、、、\\\\\\\\nしかしだからこそ、ミコのいい反応が欲しくなってしまう。\\\\\\\\nとりあえずいろいろあげてみるか、、、\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"ミコにミコの大好きな特定のアイテムをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 245": "{\"Title\":\"もっとミコの喜ぶ顔5\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"ミコの喜ぶツボは難しい、、、\\\\\\\\nしかしだからこそ、ミコのいい反応が欲しくなってしまう。\\\\\\\\nとりあえずいろいろあげてみるか、、、\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"ミコにミコの大好きな特定のアイテムをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 246": "{\"Title\":\"もっとミコの喜ぶ顔6\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"ミコの喜ぶツボは難しい、、、\\\\\\\\nしかしだからこそ、ミコのいい反応が欲しくなってしまう。\\\\\\\\nとりあえずいろいろあげてみるか、、、\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"ミコにミコの大好きな特定のアイテムをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 247": "{\"Title\":\"もっとミコの喜ぶ顔7\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"ミコの喜ぶツボは難しい、、、\\\\\\\\nしかしだからこそ、ミコのいい反応が欲しくなってしまう。\\\\\\\\nとりあえずいろいろあげてみるか、、、\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"ミコにミコの大好きな特定のアイテムをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 248": "{\"Title\":\"もっとミコの喜ぶ顔8\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"ミコの喜ぶツボは難しい、、、\\\\\\\\nしかしだからこそ、ミコのいい反応が欲しくなってしまう。\\\\\\\\nとりあえずいろいろあげてみるか、、、\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"ミコにミコの大好きな特定のアイテムをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x2\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 249": "",
"Quest 250": "",
"Quest 251": "{\"Title\":\"ミコに特別なものを1\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"ミコがほんとうに求めているものはなんだろうか、、?\\\\\\\\nミコが執着しているものを改めて考えてみよう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"ミコに特別なものをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x3\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 252": "{\"Title\":\"ミコに特別なものを2\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"ミコがほんとうに求めているものはなんだろうか、、?\\\\\\\\nミコが執着しているものを改めて考えてみよう。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"ミコに特別なものをプレゼントする\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x3\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 253": "",
"Quest 254": "",
"Quest 255": "",
"Quest 256": "",
"Quest 257": "",
"Quest 258": "",
"Quest 259": "",
"Quest 260": "",
"Quest 261": "{\"Title\":\"■■アイテム系等追加■■\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\Knowing that Alto is just a scholar, Rikka feels uneasy.\\\\\\\\nだからといってゴブリンに襲われたら彼女はどんな顔をするのだろうと、そんな考えがよぎったのは秘密だ。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"リッカがゴブリンに中出しされるのを目の当たりにする\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x1\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 262": "",
"Quest 263": "",
"Quest 264": "",
"Quest 265": "",
"Quest 266": "",
"Quest 267": "",
"Quest 268": "",
"Quest 269": "",
"Quest 270": "",
"Quest 271": "",
"Quest 272": "",
"Quest 273": "",
"Quest 274": "",
"Quest 275": "",
"Quest 276": "",
"Quest 277": "",
"Quest 278": "",
"Quest 279": "",
"Quest 280": "",
"Quest 281": "",
"Quest 282": "",
"Quest 283": "",
"Quest 284": "",
"Quest 285": "",
"Quest 286": "",
"Quest 287": "",
"Quest 288": "",
"Quest 289": "",
"Quest 290": "",
"Quest 291": "",
"Quest 292": "",
"Quest 293": "",
"Quest 294": "",
"Quest 295": "",
"Quest 296": "",
"Quest 297": "",
"Quest 298": "",
"Quest 299": "",
"Quest 300": "",
"---クエスト 301 から 400---": "",
"Category: 301 to 400": "\\c[14]まっとうな願望",
"難易度301 to 400": "\\i[87]\\i[87]\\i[87]",
"From: 301 to 400": "NPCの名前",
"Location: 301 to 400": "NPCの場所",
"Quest 301": "{\"Title\":\"リッカの貞操\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"リッカはこの任務の危険をわかっているのだろうか?\\\\\\\\n何も知らないリッカは、何も知らないリッカのまま\\\\\\\\n事件の解決を迎えてほしい。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"リッカが処女のまま、事件を解決する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x8\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 302": "{\"Title\":\"シーナの純潔\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"シーナの繊細さでは、魔物に純潔を奪われでもしたら\\\\\\\\n耐えられないだろう。そんな目に会って泣くシーナは\\\\\\\\n見たくない。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"シーナが処女のまま、事件を解決する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x8\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 303": "{\"Title\":\"ヘレナのみさお\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"ヘレナは優しく上品は人妻だ。\\\\\\\\n夫が不在の中協力してもらうからには、彼女の操は\\\\\\\\n守り抜いてもらわないと、こちらの立場がない、、、\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"ヘレナが誰ともSEXをしないまま、事件を解決する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x8\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 304": "{\"Title\":\"ミコの処女\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"ミコはまだ、、小さく、\\\\\\\\n彼女の貞操を心配することさえ、はばかられる気持ちになる。\\\\\\\\nこの子の何も知らない身体は、何にも穢されてほしくない。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"ミコが処女のまま、事件を解決する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x8\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 305": "",
"Quest 306": "{\"Title\":\"研究で役に立つ➀\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"仲間が催淫状態になった。\\\\\\\\n開発したアイテムで彼女たちを催淫状態から解放するような\\\\\\\\n処置をしてやれないだろうか。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"特定のアイテムを調合・使用して仲間の催淫を解除する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x1\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 307": "{\"Title\":\"研究で役に立つ➁\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"仲間が魔物に犯されてしまった、、、\\\\\\\\nせめて、彼女の子宮から魔物の精液を取り去って\\\\\\\\n妊娠の危険を少しでも減らしたい。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"アイテムを調合・使用して仲間の子宮から魔物の精液を吸い出す\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x1\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 308": "{\"Title\":\"研究で役に立つ➂\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"仲間の妊娠が進んでいる\\\\\\\\n開発したアイテムで彼女たちを妊娠状態から解放してやれない\\\\\\\\nだろうか。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"特定のアイテムを調合・使用して仲間を妊娠状態から解放する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x1\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 309": "{\"Title\":\"研究で役に立つ➃\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"魔物による強制排卵を事前に予防する術はないだろうか。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"特定のアイテムを調合・使用して魔物による強制排卵予防する\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x1\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 310": "{\"Title\":\"\\\\i[87]Untitled Quest\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"|-=AUTO=-|\",\"From\":\"|-=AUTO=-|\",\"Location\":\"|-=AUTO=-|\",\"Description\":\"[\\\"\\\\\\\"This is the \\\\\\\\\\\\\\\\c[4]default\\\\\\\\\\\\\\\\c[0] quest description.\\\\\\\"\\\",\\\"\\\\\\\"This is the \\\\\\\\\\\\\\\\c[4]default\\\\\\\\\\\\\\\\c[0] quest description.\\\\\\\\n\\\\\\\\nYou can insert multiple description entries in case you\\\\\\\\never want to update the quest description midway while the\\\\\\\\nquest is in progress.\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\c[4]First\\\\\\\\\\\\\\\\c[0] objective to be cleared.\\\\\\\"\\\",\\\"\\\\\\\"\\\\\\\\\\\\\\\\c[4]Second\\\\\\\\\\\\\\\\c[0] objective, but it's hidden.\\\\\\\"\\\",\\\"\\\\\\\"To make other objectives appear,\\\\\\\\nenable them through the \\\\\\\\\\\\\\\\c[4]'Visible\\\\\\\\nObjectives'\\\\\\\\\\\\\\\\c[0] plugin parameter or by\\\\\\\\nusing a plugin command to make\\\\\\\\nthem appear\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[176]Potion x5\\\\\\\"\\\",\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[178]Ether x3\\\\\\\"\\\",\\\"\\\\\\\"To make other rewards appear,\\\\\\\\nenable them through the \\\\\\\\\\\\\\\\c[4]'Visible\\\\\\\\nRewards'\\\\\\\\\\\\\\\\c[0] plugin parameter or by\\\\\\\\nusing a plugin command to make\\\\\\\\nthem appear\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"This is a subtext. It is used as\\\\\\\\nextra text that you may want to\\\\\\\\nplace on your quest journal that\\\\\\\\ndiffers from the description.\\\\\\\"\\\"]\"}",
"Quest 311": "",
"Quest 312": "",
"Quest 313": "",
"Quest 314": "",
"Quest 315": "",
"Quest 316": "",
"Quest 317": "",
"Quest 318": "",
"Quest 319": "",
"Quest 320": "",
"Quest 321": "{\"Title\":\"大きすぎる芽たち\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"凶暴化した魔物の次の世代が現れてしまった。\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"全ての種類の第2世代の魔物を倒す\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\\\\\\\\\\i[354]Fragment of Willpower x10\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 322": "",
"Quest 323": "",
"Quest 324": "",
"Quest 325": "{\"Title\":\"僕なりの強さ\",\"Type\":\"|-=AUTO=-|\",\"Difficulty\":\"\\\\i[87]\\\\i[87]\\\\i[87]\",\"From\":\"NPCの名前\",\"Location\":\"NPCの場所\",\"Description\":\"[\\\"\\\\\\\"僕なりの強さ\\\\\\\\n事件は解決した。\\\\\\\\nはたして僕はどれほど役に立ったんだろう。\\\\\\\\n僕には、魔物を倒せるような強さはない。\\\\\\\\nもちろん、人間の強さは腕力だけではないだろう。\\\\\\\\nでも、僕は腕力をおぎなう別の強さをなにか持ち合わせている\\\\\\\\nだろうか、、\\\\\\\\n僕が手にできる力ってなんだろうか\\\\\\\\n僕なりの強さってなんだろうか\\\\\\\\n\\\\\\\"\\\"]\",\"Objectives List\":\"[\\\"\\\\\\\"僕なりの強さを見つける\\\\\\\\n\\\\\\\"\\\"]\",\"Visible Objectives\":\"[\\\"1\\\"]\",\"Rewards List\":\"[\\\"\\\\\\\"\\\\\\\"\\\"]\",\"Visible Rewards\":\"[\\\"1\\\"]\",\"Subtext\":\"[\\\"\\\\\\\"\\\\\\\"\\\",\\\"\\\\\\\"サブテキストです。\\\\\\\\nクエストジャーナルに表示する説明文とは\\\\\\\\n別の付属文として表示されます。\\\\\\\"\\\"]\"}",
"Quest 326": "",
"Quest 327": "",
"Quest 328": "",
"Quest 329": "",
"Quest 330": "",
"Quest 331": "",
"Quest 332": "",
"Quest 333": "",
"Quest 334": "",
"Quest 335": "",
"Quest 336": "",
"Quest 337": "",
"Quest 338": "",
"Quest 339": "",
"Quest 340": "",
"Quest 341": "",
"Quest 342": "",
"Quest 343": "",
"Quest 344": "",
"Quest 345": "",
"Quest 346": "",
"Quest 347": "",
"Quest 348": "",
"Quest 349": "",
"Quest 350": "",
"Quest 351": "",
"Quest 352": "",
"Quest 353": "",
"Quest 354": "",
"Quest 355": "",
"Quest 356": "",
"Quest 357": "",
"Quest 358": "",
"Quest 359": "",
"Quest 360": "",
"Quest 361": "",
"Quest 362": "",
"Quest 363": "",
"Quest 364": "",
"Quest 365": "",
"Quest 366": "",
"Quest 367": "",
"Quest 368": "",
"Quest 369": "",
"Quest 370": "",
"Quest 371": "",
"Quest 372": "",
"Quest 373": "",
"Quest 374": "",
"Quest 375": "",
"Quest 376": "",
"Quest 377": "",
"Quest 378": "",
"Quest 379": "",
"Quest 380": "",
"Quest 381": "",
"Quest 382": "",
"Quest 383": "",
"Quest 384": "",
"Quest 385": "",
"Quest 386": "",
"Quest 387": "",
"Quest 388": "",
"Quest 389": "",
"Quest 390": "",
"Quest 391": "",
"Quest 392": "",
"Quest 393": "",
"Quest 394": "",
"Quest 395": "",
"Quest 396": "",
"Quest 397": "",
"Quest 398": "",
"Quest 399": "",
"Quest 400": "",
"---クエスト 401 から 500---": "",
"Category: 401 to 500": "\\c[14]まっとうな願望",
"難易度401 to 500": "\\i[87]\\i[87]\\i[87]",
"From: 401 to 500": "NPCの名前",
"Location: 401 to 500": "NPCの場所",
"Quest 401": "",
"Quest 402": "",
"Quest 403": "",
"Quest 404": "",
"Quest 405": "",
"Quest 406": "",
"Quest 407": "",
"Quest 408": "",
"Quest 409": "",
"Quest 410": "",
"Quest 411": "",
"Quest 412": "",
"Quest 413": "",
"Quest 414": "",
"Quest 415": "",
"Quest 416": "",
"Quest 417": "",
"Quest 418": "",
"Quest 419": "",
"Quest 420": "",
"Quest 421": "",
"Quest 422": "",
"Quest 423": "",
"Quest 424": "",
"Quest 425": "",
"Quest 426": "",
"Quest 427": "",
"Quest 428": "",
"Quest 429": "",
"Quest 430": "",
"Quest 431": "",
"Quest 432": "",
"Quest 433": "",
"Quest 434": "",
"Quest 435": "",
"Quest 436": "",
"Quest 437": "",
"Quest 438": "",
"Quest 439": "",
"Quest 440": "",
"Quest 441": "",
"Quest 442": "",
"Quest 443": "",
"Quest 444": "",
"Quest 445": "",
"Quest 446": "",
"Quest 447": "",
"Quest 448": "",
"Quest 449": "",
"Quest 450": "",
"Quest 451": "",
"Quest 452": "",
"Quest 453": "",
"Quest 454": "",
"Quest 455": "",
"Quest 456": "",
"Quest 457": "",
"Quest 458": "",
"Quest 459": "",
"Quest 460": "",
"Quest 461": "",
"Quest 462": "",
"Quest 463": "",
"Quest 464": "",
"Quest 465": "",
"Quest 466": "",
"Quest 467": "",
"Quest 468": "",
"Quest 469": "",
"Quest 470": "",
"Quest 471": "",
"Quest 472": "",
"Quest 473": "",
"Quest 474": "",
"Quest 475": "",
"Quest 476": "",
"Quest 477": "",
"Quest 478": "",
"Quest 479": "",
"Quest 480": "",
"Quest 481": "",
"Quest 482": "",
"Quest 483": "",
"Quest 484": "",
"Quest 485": "",
"Quest 486": "",
"Quest 487": "",
"Quest 488": "",
"Quest 489": "",
"Quest 490": "",
"Quest 491": "",
"Quest 492": "",
"Quest 493": "",
"Quest 494": "",
"Quest 495": "",
"Quest 496": "",
"Quest 497": "",
"Quest 498": "",
"Quest 499": "",
"Quest 500": "",
"---クエスト 501 から 600---": "",
"Category: 501 to 600": "\\c[14]まっとうな願望",
"難易度501 to 600": "\\i[87]\\i[87]\\i[87]",
"From: 501 to 600": "NPCの名前",
"Location: 501 to 600": "NPCの場所",
"Quest 501": "",
"Quest 502": "",
"Quest 503": "",
"Quest 504": "",
"Quest 505": "",
"Quest 506": "",
"Quest 507": "",
"Quest 508": "",
"Quest 509": "",
"Quest 510": "",
"Quest 511": "",
"Quest 512": "",
"Quest 513": "",
"Quest 514": "",
"Quest 515": "",
"Quest 516": "",
"Quest 517": "",
"Quest 518": "",
"Quest 519": "",
"Quest 520": "",
"Quest 521": "",
"Quest 522": "",
"Quest 523": "",
"Quest 524": "",
"Quest 525": "",
"Quest 526": "",
"Quest 527": "",
"Quest 528": "",
"Quest 529": "",
"Quest 530": "",
"Quest 531": "",
"Quest 532": "",
"Quest 533": "",
"Quest 534": "",
"Quest 535": "",
"Quest 536": "",
"Quest 537": "",
"Quest 538": "",
"Quest 539": "",
"Quest 540": "",
"Quest 541": "",
"Quest 542": "",
"Quest 543": "",
"Quest 544": "",
"Quest 545": "",
"Quest 546": "",
"Quest 547": "",
"Quest 548": "",
"Quest 549": "",
"Quest 550": "",
"Quest 551": "",
"Quest 552": "",
"Quest 553": "",
"Quest 554": "",
"Quest 555": "",
"Quest 556": "",
"Quest 557": "",
"Quest 558": "",
"Quest 559": "",
"Quest 560": "",
"Quest 561": "",
"Quest 562": "",
"Quest 563": "",
"Quest 564": "",
"Quest 565": "",
"Quest 566": "",
"Quest 567": "",
"Quest 568": "",
"Quest 569": "",
"Quest 570": "",
"Quest 571": "",
"Quest 572": "",
"Quest 573": "",
"Quest 574": "",
"Quest 575": "",
"Quest 576": "",
"Quest 577": "",
"Quest 578": "",
"Quest 579": "",
"Quest 580": "",
"Quest 581": "",
"Quest 582": "",
"Quest 583": "",
"Quest 584": "",
"Quest 585": "",
"Quest 586": "",
"Quest 587": "",
"Quest 588": "",
"Quest 589": "",
"Quest 590": "",
"Quest 591": "",
"Quest 592": "",
"Quest 593": "",
"Quest 594": "",
"Quest 595": "",
"Quest 596": "",
"Quest 597": "",
"Quest 598": "",
"Quest 599": "",
"Quest 600": "",
"---クエスト 601 から 700---": "",
"Category: 601 to 700": "\\c[14]まっとうな願望",
"難易度601 to 700": "\\i[87]\\i[87]\\i[87]",
"From: 601 to 700": "NPCの名前",
"Location: 601 to 700": "NPCの場所",
"Quest 601": "",
"Quest 602": "",
"Quest 603": "",
"Quest 604": "",
"Quest 605": "",
"Quest 606": "",
"Quest 607": "",
"Quest 608": "",
"Quest 609": "",
"Quest 610": "",
"Quest 611": "",
"Quest 612": "",
"Quest 613": "",
"Quest 614": "",
"Quest 615": "",
"Quest 616": "",
"Quest 617": "",
"Quest 618": "",
"Quest 619": "",
"Quest 620": "",
"Quest 621": "",
"Quest 622": "",
"Quest 623": "",
"Quest 624": "",
"Quest 625": "",
"Quest 626": "",
"Quest 627": "",
"Quest 628": "",
"Quest 629": "",
"Quest 630": "",
"Quest 631": "",
"Quest 632": "",
"Quest 633": "",
"Quest 634": "",
"Quest 635": "",
"Quest 636": "",
"Quest 637": "",
"Quest 638": "",
"Quest 639": "",
"Quest 640": "",
"Quest 641": "",
"Quest 642": "",
"Quest 643": "",
"Quest 644": "",
"Quest 645": "",
"Quest 646": "",
"Quest 647": "",
"Quest 648": "",
"Quest 649": "",
"Quest 650": "",
"Quest 651": "",
"Quest 652": "",
"Quest 653": "",
"Quest 654": "",
"Quest 655": "",
"Quest 656": "",
"Quest 657": "",
"Quest 658": "",
"Quest 659": "",
"Quest 660": "",
"Quest 661": "",
"Quest 662": "",
"Quest 663": "",
"Quest 664": "",
"Quest 665": "",
"Quest 666": "",
"Quest 667": "",
"Quest 668": "",
"Quest 669": "",
"Quest 670": "",
"Quest 671": "",
"Quest 672": "",
"Quest 673": "",
"Quest 674": "",
"Quest 675": "",
"Quest 676": "",
"Quest 677": "",
"Quest 678": "",
"Quest 679": "",
"Quest 680": "",
"Quest 681": "",
"Quest 682": "",
"Quest 683": "",
"Quest 684": "",
"Quest 685": "",
"Quest 686": "",
"Quest 687": "",
"Quest 688": "",
"Quest 689": "",
"Quest 690": "",
"Quest 691": "",
"Quest 692": "",
"Quest 693": "",
"Quest 694": "",
"Quest 695": "",
"Quest 696": "",
"Quest 697": "",
"Quest 698": "",
"Quest 699": "",
"Quest 700": "",
"---クエスト 701 から 800---": "",
"Category: 701 to 800": "\\c[14]まっとうな願望",
"難易度701 to 800": "\\i[87]\\i[87]\\i[87]",
"From: 701 to 800": "NPCの名前",
"Location: 701 to 800": "NPCの場所",
"Quest 701": "",
"Quest 702": "",
"Quest 703": "",
"Quest 704": "",
"Quest 705": "",
"Quest 706": "",
"Quest 707": "",
"Quest 708": "",
"Quest 709": "",
"Quest 710": "",
"Quest 711": "",
"Quest 712": "",
"Quest 713": "",
"Quest 714": "",
"Quest 715": "",
"Quest 716": "",
"Quest 717": "",
"Quest 718": "",
"Quest 719": "",
"Quest 720": "",
"Quest 721": "",
"Quest 722": "",
"Quest 723": "",
"Quest 724": "",
"Quest 725": "",
"Quest 726": "",
"Quest 727": "",
"Quest 728": "",
"Quest 729": "",
"Quest 730": "",
"Quest 731": "",
"Quest 732": "",
"Quest 733": "",
"Quest 734": "",
"Quest 735": "",
"Quest 736": "",
"Quest 737": "",
"Quest 738": "",
"Quest 739": "",
"Quest 740": "",
"Quest 741": "",
"Quest 742": "",
"Quest 743": "",
"Quest 744": "",
"Quest 745": "",
"Quest 746": "",
"Quest 747": "",
"Quest 748": "",
"Quest 749": "",
"Quest 750": "",
"Quest 751": "",
"Quest 752": "",
"Quest 753": "",
"Quest 754": "",
"Quest 755": "",
"Quest 756": "",
"Quest 757": "",
"Quest 758": "",
"Quest 759": "",
"Quest 760": "",
"Quest 761": "",
"Quest 762": "",
"Quest 763": "",
"Quest 764": "",
"Quest 765": "",
"Quest 766": "",
"Quest 767": "",
"Quest 768": "",
"Quest 769": "",
"Quest 770": "",
"Quest 771": "",
"Quest 772": "",
"Quest 773": "",
"Quest 774": "",
"Quest 775": "",
"Quest 776": "",
"Quest 777": "",
"Quest 778": "",
"Quest 779": "",
"Quest 780": "",
"Quest 781": "",
"Quest 782": "",
"Quest 783": "",
"Quest 784": "",
"Quest 785": "",
"Quest 786": "",
"Quest 787": "",
"Quest 788": "",
"Quest 789": "",
"Quest 790": "",
"Quest 791": "",
"Quest 792": "",
"Quest 793": "",
"Quest 794": "",
"Quest 795": "",
"Quest 796": "",
"Quest 797": "",
"Quest 798": "",
"Quest 799": "",
"Quest 800": "",
"---クエスト 801 から 900---": "",
"Category: 801 to 900": "\\c[14]まっとうな願望",
"難易度801 to 900": "\\i[87]\\i[87]\\i[87]",
"From: 801 to 900": "NPCの名前",
"Location: 801 to 900": "NPCの場所",
"Quest 801": "",
"Quest 802": "",
"Quest 803": "",
"Quest 804": "",
"Quest 805": "",
"Quest 806": "",
"Quest 807": "",
"Quest 808": "",
"Quest 809": "",
"Quest 810": "",
"Quest 811": "",
"Quest 812": "",
"Quest 813": "",
"Quest 814": "",
"Quest 815": "",
"Quest 816": "",
"Quest 817": "",
"Quest 818": "",
"Quest 819": "",
"Quest 820": "",
"Quest 821": "",
"Quest 822": "",
"Quest 823": "",
"Quest 824": "",
"Quest 825": "",
"Quest 826": "",
"Quest 827": "",
"Quest 828": "",
"Quest 829": "",
"Quest 830": "",
"Quest 831": "",
"Quest 832": "",
"Quest 833": "",
"Quest 834": "",
"Quest 835": "",
"Quest 836": "",
"Quest 837": "",
"Quest 838": "",
"Quest 839": "",
"Quest 840": "",
"Quest 841": "",
"Quest 842": "",
"Quest 843": "",
"Quest 844": "",
"Quest 845": "",
"Quest 846": "",
"Quest 847": "",
"Quest 848": "",
"Quest 849": "",
"Quest 850": "",
"Quest 851": "",
"Quest 852": "",
"Quest 853": "",
"Quest 854": "",
"Quest 855": "",
"Quest 856": "",
"Quest 857": "",
"Quest 858": "",
"Quest 859": "",
"Quest 860": "",
"Quest 861": "",
"Quest 862": "",
"Quest 863": "",
"Quest 864": "",
"Quest 865": "",
"Quest 866": "",
"Quest 867": "",
"Quest 868": "",
"Quest 869": "",
"Quest 870": "",
"Quest 871": "",
"Quest 872": "",
"Quest 873": "",
"Quest 874": "",
"Quest 875": "",
"Quest 876": "",
"Quest 877": "",
"Quest 878": "",
"Quest 879": "",
"Quest 880": "",
"Quest 881": "",
"Quest 882": "",
"Quest 883": "",
"Quest 884": "",
"Quest 885": "",
"Quest 886": "",
"Quest 887": "",
"Quest 888": "",
"Quest 889": "",
"Quest 890": "",
"Quest 891": "",
"Quest 892": "",
"Quest 893": "",
"Quest 894": "",
"Quest 895": "",
"Quest 896": "",
"Quest 897": "",
"Quest 898": "",
"Quest 899": "",
"Quest 900": "",
"---クエスト 901 から 1000---": "",
"Category: 901 to 1000": "\\c[14]まっとうな願望",
"難易度901 to 1000": "\\i[87]\\i[87]\\i[87]",
"From: 901 to 1000": "NPCの名前",
"Location: 901 to 1000": "NPCの場所",
"Quest 901": "",
"Quest 902": "",
"Quest 903": "",
"Quest 904": "",
"Quest 905": "",
"Quest 906": "",
"Quest 907": "",
"Quest 908": "",
"Quest 909": "",
"Quest 910": "",
"Quest 911": "",
"Quest 912": "",
"Quest 913": "",
"Quest 914": "",
"Quest 915": "",
"Quest 916": "",
"Quest 917": "",
"Quest 918": "",
"Quest 919": "",
"Quest 920": "",
"Quest 921": "",
"Quest 922": "",
"Quest 923": "",
"Quest 924": "",
"Quest 925": "",
"Quest 926": "",
"Quest 927": "",
"Quest 928": "",
"Quest 929": "",
"Quest 930": "",
"Quest 931": "",
"Quest 932": "",
"Quest 933": "",
"Quest 934": "",
"Quest 935": "",
"Quest 936": "",
"Quest 937": "",
"Quest 938": "",
"Quest 939": "",
"Quest 940": "",
"Quest 941": "",
"Quest 942": "",
"Quest 943": "",
"Quest 944": "",
"Quest 945": "",
"Quest 946": "",
"Quest 947": "",
"Quest 948": "",
"Quest 949": "",
"Quest 950": "",
"Quest 951": "",
"Quest 952": "",
"Quest 953": "",
"Quest 954": "",
"Quest 955": "",
"Quest 956": "",
"Quest 957": "",
"Quest 958": "",
"Quest 959": "",
"Quest 960": "",
"Quest 961": "",
"Quest 962": "",
"Quest 963": "",
"Quest 964": "",
"Quest 965": "",
"Quest 966": "",
"Quest 967": "",
"Quest 968": "",
"Quest 969": "",
"Quest 970": "",
"Quest 971": "",
"Quest 972": "",
"Quest 973": "",
"Quest 974": "",
"Quest 975": "",
"Quest 976": "",
"Quest 977": "",
"Quest 978": "",
"Quest 979": "",
"Quest 980": "",
"Quest 981": "",
"Quest 982": "",
"Quest 983": "",
"Quest 984": "",
"Quest 985": "",
"Quest 986": "",
"Quest 987": "",
"Quest 988": "",
"Quest 989": "",
"Quest 990": "",
"Quest 991": "",
"Quest 992": "",
"Quest 993": "",
"Quest 994": "",
"Quest 995": "",
"Quest 996": "",
"Quest 997": "",
"Quest 998": "",
"Quest 999": "",
"Quest 1000": "---------------------------------------------------------------------------",
"Title": "\\i[87]無題のクエスト",
"Type": "|-=AUTO=-|",
"Difficulty": "|-=AUTO=-|",
"From": "|-=AUTO=-|",
"Location": "|-=AUTO=-|",
"Description": "[\"\\\"これがデフォルトのクエストの説明です。\\\"\",\"\\\"これがデフォルトのクエストの説明です。\\\\n\\\\nクエストの進行中に途中でクエストの説明を更新したい場合、\\\\n複数の説明エントリを挿入できます。\\\"\"]",
"Objectives List": "[\"\\\"クリアする最初の目的\\\"\",\"\\\"第二の目的、しかしそれは隠されています。\\\"\",\"\\\"他の目的を表示するには、\\\\n'Visible Objectives'プラグインパラメータを使用するか、\\\\nプラグインコマンドを使用してそれらを表示させます。\\\"\"]",
"Visible Objectives": "[\"1\"]",
"Rewards List": "[\"\\\"\\\\\\\\i[176]ポーション x5\\\"\",\"\\\"\\\\\\\\i[178]エーテル x3\\\"\",\"\\\"他の報酬を表示するには、\\\\n'Visible Rewards'プラグインパラメータを使用するか、\\\\nプラグインコマンドを使用して表示させます。\\\"\"]",
"Visible Rewards": "[\"1\"]",
"Subtext": "[\"\\\"\\\"\",\"\\\"これはサブテキストです。\\\\n\\\\n説明とは異なる、クエストジャーナルに\\\\n追加のテキストとして使用されます。\\\"\"]"
}
}

445
www/js/libs/fpsmeter.js Normal file
View file

@ -0,0 +1,445 @@
/*! FPSMeter 0.3.1 - 9th May 2013 | https://github.com/Darsain/fpsmeter */
(function (m, j) {
function s(a, e) {
for (var g in e)
try {
a.style[g] = e[g];
} catch (j) {}
return a;
}
function H(a) {
return null == a
? String(a)
: "object" === typeof a || "function" === typeof a
? Object.prototype.toString
.call(a)
.match(/\s([a-z]+)/i)[1]
.toLowerCase() || "object"
: typeof a;
}
function R(a, e) {
if ("array" !== H(e)) return -1;
if (e.indexOf) return e.indexOf(a);
for (var g = 0, j = e.length; g < j; g++) if (e[g] === a) return g;
return -1;
}
function I() {
var a = arguments,
e;
for (e in a[1])
if (a[1].hasOwnProperty(e))
switch (H(a[1][e])) {
case "object":
a[0][e] = I({}, a[0][e], a[1][e]);
break;
case "array":
a[0][e] = a[1][e].slice(0);
break;
default:
a[0][e] = a[1][e];
}
return 2 < a.length
? I.apply(null, [a[0]].concat(Array.prototype.slice.call(a, 2)))
: a[0];
}
function N(a) {
a = Math.round(255 * a).toString(16);
return 1 === a.length ? "0" + a : a;
}
function S(a, e, g, j) {
if (a.addEventListener)
a[j ? "removeEventListener" : "addEventListener"](e, g, !1);
else if (a.attachEvent) a[j ? "detachEvent" : "attachEvent"]("on" + e, g);
}
function D(a, e) {
function g(a, b, d, c) {
return y[0 | a][Math.round(Math.min(((b - d) / (c - d)) * J, J))];
}
function r() {
f.legend.fps !== q &&
((f.legend.fps = q), (f.legend[T] = q ? "FPS" : "ms"));
K = q ? b.fps : b.duration;
f.count[T] = 999 < K ? "999+" : K.toFixed(99 < K ? 0 : d.decimals);
}
function m() {
z = A();
L < z - d.threshold &&
((b.fps -= b.fps / Math.max(1, (60 * d.smoothing) / d.interval)),
(b.duration = 1e3 / b.fps));
for (c = d.history; c--; )
(E[c] = 0 === c ? b.fps : E[c - 1]),
(F[c] = 0 === c ? b.duration : F[c - 1]);
r();
if (d.heat) {
if (w.length)
for (c = w.length; c--; )
w[c].el.style[h[w[c].name].heatOn] = q
? g(h[w[c].name].heatmap, b.fps, 0, d.maxFps)
: g(h[w[c].name].heatmap, b.duration, d.threshold, 0);
if (f.graph && h.column.heatOn)
for (c = u.length; c--; )
u[c].style[h.column.heatOn] = q
? g(h.column.heatmap, E[c], 0, d.maxFps)
: g(h.column.heatmap, F[c], d.threshold, 0);
}
if (f.graph)
for (p = 0; p < d.history; p++)
u[p].style.height =
(q
? E[p]
? Math.round((O / d.maxFps) * Math.min(E[p], d.maxFps))
: 0
: F[p]
? Math.round((O / d.threshold) * Math.min(F[p], d.threshold))
: 0) + "px";
}
function k() {
20 > d.interval
? ((x = M(k)), m())
: ((x = setTimeout(k, d.interval)), (P = M(m)));
}
function G(a) {
a = a || window.event;
a.preventDefault
? (a.preventDefault(), a.stopPropagation())
: ((a.returnValue = !1), (a.cancelBubble = !0));
b.toggle();
}
function U() {
d.toggleOn && S(f.container, d.toggleOn, G, 1);
a.removeChild(f.container);
}
function V() {
f.container && U();
h = D.theme[d.theme];
y = h.compiledHeatmaps || [];
if (!y.length && h.heatmaps.length) {
for (p = 0; p < h.heatmaps.length; p++) {
y[p] = [];
for (c = 0; c <= J; c++) {
var b = y[p],
e = c,
g;
g = (0.33 / J) * c;
var j = h.heatmaps[p].saturation,
m = h.heatmaps[p].lightness,
n = void 0,
k = void 0,
l = void 0,
t = (l = void 0),
v = (n = k = void 0),
v = void 0,
l = 0.5 >= m ? m * (1 + j) : m + j - m * j;
0 === l
? (g = "#000")
: ((t = 2 * m - l),
(k = (l - t) / l),
(g *= 6),
(n = Math.floor(g)),
(v = g - n),
(v *= l * k),
0 === n || 6 === n
? ((n = l), (k = t + v), (l = t))
: 1 === n
? ((n = l - v), (k = l), (l = t))
: 2 === n
? ((n = t), (k = l), (l = t + v))
: 3 === n
? ((n = t), (k = l - v))
: 4 === n
? ((n = t + v), (k = t))
: ((n = l), (k = t), (l -= v)),
(g = "#" + N(n) + N(k) + N(l)));
b[e] = g;
}
}
h.compiledHeatmaps = y;
}
f.container = s(document.createElement("div"), h.container);
f.count = f.container.appendChild(
s(document.createElement("div"), h.count)
);
f.legend = f.container.appendChild(
s(document.createElement("div"), h.legend)
);
f.graph = d.graph
? f.container.appendChild(s(document.createElement("div"), h.graph))
: 0;
w.length = 0;
for (var q in f) f[q] && h[q].heatOn && w.push({ name: q, el: f[q] });
u.length = 0;
if (f.graph) {
f.graph.style.width =
d.history * h.column.width +
(d.history - 1) * h.column.spacing +
"px";
for (c = 0; c < d.history; c++)
(u[c] = f.graph.appendChild(
s(document.createElement("div"), h.column)
)),
(u[c].style.position = "absolute"),
(u[c].style.bottom = 0),
(u[c].style.right =
c * h.column.width + c * h.column.spacing + "px"),
(u[c].style.width = h.column.width + "px"),
(u[c].style.height = "0px");
}
s(f.container, d);
r();
a.appendChild(f.container);
f.graph && (O = f.graph.clientHeight);
d.toggleOn &&
("click" === d.toggleOn && (f.container.style.cursor = "pointer"),
S(f.container, d.toggleOn, G));
}
"object" === H(a) && a.nodeType === j && ((e = a), (a = document.body));
a || (a = document.body);
var b = this,
d = I({}, D.defaults, e || {}),
f = {},
u = [],
h,
y,
J = 100,
w = [],
W = 0,
B = d.threshold,
Q = 0,
L = A() - B,
z,
E = [],
F = [],
x,
P,
q = "fps" === d.show,
O,
K,
c,
p;
b.options = d;
b.fps = 0;
b.duration = 0;
b.isPaused = 0;
b.tickStart = function () {
Q = A();
};
b.tick = function () {
z = A();
W = z - L;
B += (W - B) / d.smoothing;
b.fps = 1e3 / B;
b.duration = Q < L ? B : z - Q;
L = z;
};
b.pause = function () {
x && ((b.isPaused = 1), clearTimeout(x), C(x), C(P), (x = P = 0));
return b;
};
b.resume = function () {
x || ((b.isPaused = 0), k());
return b;
};
b.set = function (a, c) {
d[a] = c;
q = "fps" === d.show;
-1 !== R(a, X) && V();
-1 !== R(a, Y) && s(f.container, d);
return b;
};
b.showDuration = function () {
b.set("show", "ms");
return b;
};
b.showFps = function () {
b.set("show", "fps");
return b;
};
b.toggle = function () {
b.set("show", q ? "ms" : "fps");
return b;
};
b.hide = function () {
b.pause();
f.container.style.display = "none";
return b;
};
b.show = function () {
b.resume();
f.container.style.display = "block";
return b;
};
b.destroy = function () {
b.pause();
U();
b.tick = b.tickStart = function () {};
};
V();
k();
}
var A,
r = m.performance;
A =
r && (r.now || r.webkitNow)
? r[r.now ? "now" : "webkitNow"].bind(r)
: function () {
return +new Date();
};
for (
var C = m.cancelAnimationFrame || m.cancelRequestAnimationFrame,
M = m.requestAnimationFrame,
r = ["moz", "webkit", "o"],
G = 0,
k = 0,
Z = r.length;
k < Z && !C;
++k
)
M =
(C =
m[r[k] + "CancelAnimationFrame"] ||
m[r[k] + "CancelRequestAnimationFrame"]) &&
m[r[k] + "RequestAnimationFrame"];
C ||
((M = function (a) {
var e = A(),
g = Math.max(0, 16 - (e - G));
G = e + g;
return m.setTimeout(function () {
a(e + g);
}, g);
}),
(C = function (a) {
clearTimeout(a);
}));
var T =
"string" === H(document.createElement("div").textContent)
? "textContent"
: "innerText";
D.extend = I;
window.FPSMeter = D;
D.defaults = {
interval: 100,
smoothing: 10,
show: "fps",
toggleOn: "click",
decimals: 1,
maxFps: 60,
threshold: 100,
position: "absolute",
zIndex: 10,
left: "5px",
top: "5px",
right: "auto",
bottom: "auto",
margin: "0 0 0 0",
theme: "dark",
heat: 0,
graph: 0,
history: 20,
};
var X = ["toggleOn", "theme", "heat", "graph", "history"],
Y = "position zIndex left top right bottom margin".split(" ");
})(window);
(function (m, j) {
j.theme = {};
var s = (j.theme.base = {
heatmaps: [],
container: {
heatOn: null,
heatmap: null,
padding: "5px",
minWidth: "95px",
height: "30px",
lineHeight: "30px",
textAlign: "right",
textShadow: "none",
},
count: {
heatOn: null,
heatmap: null,
position: "absolute",
top: 0,
right: 0,
padding: "5px 10px",
height: "30px",
fontSize: "24px",
fontFamily: "Consolas, Andale Mono, monospace",
zIndex: 2,
},
legend: {
heatOn: null,
heatmap: null,
position: "absolute",
top: 0,
left: 0,
padding: "5px 10px",
height: "30px",
fontSize: "12px",
lineHeight: "32px",
fontFamily: "sans-serif",
textAlign: "left",
zIndex: 2,
},
graph: {
heatOn: null,
heatmap: null,
position: "relative",
boxSizing: "padding-box",
MozBoxSizing: "padding-box",
height: "100%",
zIndex: 1,
},
column: { width: 4, spacing: 1, heatOn: null, heatmap: null },
});
j.theme.dark = j.extend({}, s, {
heatmaps: [{ saturation: 0.8, lightness: 0.8 }],
container: {
background: "#222",
color: "#fff",
border: "1px solid #1a1a1a",
textShadow: "1px 1px 0 #222",
},
count: { heatOn: "color" },
column: { background: "#3f3f3f" },
});
j.theme.light = j.extend({}, s, {
heatmaps: [{ saturation: 0.5, lightness: 0.5 }],
container: {
color: "#666",
background: "#fff",
textShadow:
"1px 1px 0 rgba(255,255,255,.5), -1px -1px 0 rgba(255,255,255,.5)",
boxShadow: "0 0 0 1px rgba(0,0,0,.1)",
},
count: { heatOn: "color" },
column: { background: "#eaeaea" },
});
j.theme.colorful = j.extend({}, s, {
heatmaps: [{ saturation: 0.5, lightness: 0.6 }],
container: {
heatOn: "backgroundColor",
background: "#888",
color: "#fff",
textShadow: "1px 1px 0 rgba(0,0,0,.2)",
boxShadow: "0 0 0 1px rgba(0,0,0,.1)",
},
column: { background: "#777", backgroundColor: "rgba(0,0,0,.2)" },
});
j.theme.transparent = j.extend({}, s, {
heatmaps: [{ saturation: 0.8, lightness: 0.5 }],
container: {
padding: 0,
color: "#fff",
textShadow: "1px 1px 0 rgba(0,0,0,.5)",
},
count: { padding: "0 5px", height: "40px", lineHeight: "40px" },
legend: { padding: "0 5px", height: "40px", lineHeight: "42px" },
graph: { height: "40px" },
column: {
width: 5,
background: "#999",
heatOn: "backgroundColor",
opacity: 0.5,
},
});
})(window, FPSMeter);

View file

@ -0,0 +1,207 @@
/*! npm.im/iphone-inline-video */
var makeVideoPlayableInline = (function () {
"use strict"; /*! npm.im/intervalometer */
function e(e, n, r, i) {
function t(r) {
(d = n(t, i)), e(r - (a || r)), (a = r);
}
var d, a;
return {
start: function () {
d || t(0);
},
stop: function () {
r(d), (d = null), (a = 0);
},
};
}
function n(n) {
return e(n, requestAnimationFrame, cancelAnimationFrame);
}
function r(e, n, r, i) {
function t(n) {
Boolean(e[r]) === Boolean(i) && n.stopImmediatePropagation(), delete e[r];
}
return e.addEventListener(n, t, !1), t;
}
function i(e, n, r, i) {
function t() {
return r[n];
}
function d(e) {
r[n] = e;
}
i && d(e[n]), Object.defineProperty(e, n, { get: t, set: d });
}
function t(e, n, r) {
r.addEventListener(n, function () {
return e.dispatchEvent(new Event(n));
});
}
function d(e, n) {
Promise.resolve().then(function () {
e.dispatchEvent(new Event(n));
});
}
function a(e) {
var n = new Audio();
return (
t(e, "play", n),
t(e, "playing", n),
t(e, "pause", n),
(n.crossOrigin = e.crossOrigin),
(n.src = e.src || e.currentSrc || "data:"),
n
);
}
function o(e, n, r) {
(m || 0) + 200 < Date.now() && ((e[g] = !0), (m = Date.now())),
r || (e.currentTime = n),
(A[++k % 3] = (100 * n) | 0);
}
function u(e) {
return e.driver.currentTime >= e.video.duration;
}
function s(e) {
var n = this;
n.video.readyState >= n.video.HAVE_FUTURE_DATA
? (n.hasAudio ||
((n.driver.currentTime =
n.video.currentTime + (e * n.video.playbackRate) / 1e3),
n.video.loop && u(n) && (n.driver.currentTime = 0)),
o(n.video, n.driver.currentTime))
: n.video.networkState !== n.video.NETWORK_IDLE ||
n.video.buffered.length ||
n.video.load(),
n.video.ended && (delete n.video[g], n.video.pause(!0));
}
function c() {
var e = this,
n = e[b];
return e.webkitDisplayingFullscreen
? void e[E]()
: ("data:" !== n.driver.src &&
n.driver.src !== e.src &&
(o(e, 0, !0), (n.driver.src = e.src)),
void (
e.paused &&
((n.paused = !1),
e.buffered.length || e.load(),
n.driver.play(),
n.updater.start(),
n.hasAudio ||
(d(e, "play"),
n.video.readyState >= n.video.HAVE_ENOUGH_DATA && d(e, "playing")))
));
}
function v(e) {
var n = this,
r = n[b];
r.driver.pause(),
r.updater.stop(),
n.webkitDisplayingFullscreen && n[T](),
(r.paused && !e) ||
((r.paused = !0),
r.hasAudio || d(n, "pause"),
n.ended && ((n[g] = !0), d(n, "ended")));
}
function p(e, r) {
var i = (e[b] = {});
(i.paused = !0),
(i.hasAudio = r),
(i.video = e),
(i.updater = n(s.bind(i))),
r
? (i.driver = a(e))
: (e.addEventListener("canplay", function () {
e.paused || d(e, "playing");
}),
(i.driver = {
src: e.src || e.currentSrc || "data:",
muted: !0,
paused: !0,
pause: function () {
i.driver.paused = !0;
},
play: function () {
(i.driver.paused = !1), u(i) && o(e, 0);
},
get ended() {
return u(i);
},
})),
e.addEventListener(
"emptied",
function () {
var n = !i.driver.src || "data:" === i.driver.src;
i.driver.src &&
i.driver.src !== e.src &&
(o(e, 0, !0),
(i.driver.src = e.src),
n ? i.driver.play() : i.updater.stop());
},
!1
),
e.addEventListener("webkitbeginfullscreen", function () {
e.paused
? r && !i.driver.buffered.length && i.driver.load()
: (e.pause(), e[E]());
}),
r &&
(e.addEventListener("webkitendfullscreen", function () {
i.driver.currentTime = e.currentTime;
}),
e.addEventListener("seeking", function () {
A.indexOf((100 * e.currentTime) | 0) < 0 &&
(i.driver.currentTime = e.currentTime);
}));
}
function l(e) {
var n = e[b];
(e[E] = e.play),
(e[T] = e.pause),
(e.play = c),
(e.pause = v),
i(e, "paused", n.driver),
i(e, "muted", n.driver, !0),
i(e, "playbackRate", n.driver, !0),
i(e, "ended", n.driver),
i(e, "loop", n.driver, !0),
r(e, "seeking"),
r(e, "seeked"),
r(e, "timeupdate", g, !1),
r(e, "ended", g, !1);
}
function f(e, n, r) {
void 0 === n && (n = !0),
void 0 === r && (r = !0),
(r && !h) ||
e[b] ||
(p(e, n),
l(e),
e.classList.add("IIV"),
!n && e.autoplay && e.play(),
/iPhone|iPod|iPad/.test(navigator.platform) ||
console.warn(
"iphone-inline-video is not guaranteed to work in emulated environments"
));
}
var m,
y =
"undefined" == typeof Symbol
? function (e) {
return "@" + (e || "@") + Math.random();
}
: Symbol,
h =
"object-fit" in document.head.style &&
/iPhone|iPod/i.test(navigator.userAgent) &&
!matchMedia("(-webkit-video-playable-inline)").matches,
b = y(),
g = y(),
E = y("nativeplay"),
T = y("nativepause"),
A = [],
k = 0;
return (f.isWhitelisted = h), f;
})();

629
www/js/libs/lz-string.js Normal file
View file

@ -0,0 +1,629 @@
var LZString = {
_keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
_f: String.fromCharCode,
compressToBase64: function (e) {
if (e == null) return "";
var t = "";
var n, r, i, s, o, u, a;
var f = 0;
e = LZString.compress(e);
while (f < e.length * 2) {
if (f % 2 == 0) {
n = e.charCodeAt(f / 2) >> 8;
r = e.charCodeAt(f / 2) & 255;
if (f / 2 + 1 < e.length) i = e.charCodeAt(f / 2 + 1) >> 8;
else i = NaN;
} else {
n = e.charCodeAt((f - 1) / 2) & 255;
if ((f + 1) / 2 < e.length) {
r = e.charCodeAt((f + 1) / 2) >> 8;
i = e.charCodeAt((f + 1) / 2) & 255;
} else r = i = NaN;
}
f += 3;
s = n >> 2;
o = ((n & 3) << 4) | (r >> 4);
u = ((r & 15) << 2) | (i >> 6);
a = i & 63;
if (isNaN(r)) {
u = a = 64;
} else if (isNaN(i)) {
a = 64;
}
t =
t +
LZString._keyStr.charAt(s) +
LZString._keyStr.charAt(o) +
LZString._keyStr.charAt(u) +
LZString._keyStr.charAt(a);
}
return t;
},
decompressFromBase64: function (e) {
if (e == null) return "";
var t = "",
n = 0,
r,
i,
s,
o,
u,
a,
f,
l,
c = 0,
h = LZString._f;
e = e.replace(/[^A-Za-z0-9\+\/\=]/g, "");
while (c < e.length) {
u = LZString._keyStr.indexOf(e.charAt(c++));
a = LZString._keyStr.indexOf(e.charAt(c++));
f = LZString._keyStr.indexOf(e.charAt(c++));
l = LZString._keyStr.indexOf(e.charAt(c++));
i = (u << 2) | (a >> 4);
s = ((a & 15) << 4) | (f >> 2);
o = ((f & 3) << 6) | l;
if (n % 2 == 0) {
r = i << 8;
if (f != 64) {
t += h(r | s);
}
if (l != 64) {
r = o << 8;
}
} else {
t = t + h(r | i);
if (f != 64) {
r = s << 8;
}
if (l != 64) {
t += h(r | o);
}
}
n += 3;
}
return LZString.decompress(t);
},
compressToUTF16: function (e) {
if (e == null) return "";
var t = "",
n,
r,
i,
s = 0,
o = LZString._f;
e = LZString.compress(e);
for (n = 0; n < e.length; n++) {
r = e.charCodeAt(n);
switch (s++) {
case 0:
t += o((r >> 1) + 32);
i = (r & 1) << 14;
break;
case 1:
t += o(i + (r >> 2) + 32);
i = (r & 3) << 13;
break;
case 2:
t += o(i + (r >> 3) + 32);
i = (r & 7) << 12;
break;
case 3:
t += o(i + (r >> 4) + 32);
i = (r & 15) << 11;
break;
case 4:
t += o(i + (r >> 5) + 32);
i = (r & 31) << 10;
break;
case 5:
t += o(i + (r >> 6) + 32);
i = (r & 63) << 9;
break;
case 6:
t += o(i + (r >> 7) + 32);
i = (r & 127) << 8;
break;
case 7:
t += o(i + (r >> 8) + 32);
i = (r & 255) << 7;
break;
case 8:
t += o(i + (r >> 9) + 32);
i = (r & 511) << 6;
break;
case 9:
t += o(i + (r >> 10) + 32);
i = (r & 1023) << 5;
break;
case 10:
t += o(i + (r >> 11) + 32);
i = (r & 2047) << 4;
break;
case 11:
t += o(i + (r >> 12) + 32);
i = (r & 4095) << 3;
break;
case 12:
t += o(i + (r >> 13) + 32);
i = (r & 8191) << 2;
break;
case 13:
t += o(i + (r >> 14) + 32);
i = (r & 16383) << 1;
break;
case 14:
t += o(i + (r >> 15) + 32, (r & 32767) + 32);
s = 0;
break;
}
}
return t + o(i + 32);
},
decompressFromUTF16: function (e) {
if (e == null) return "";
var t = "",
n,
r,
i = 0,
s = 0,
o = LZString._f;
while (s < e.length) {
r = e.charCodeAt(s) - 32;
switch (i++) {
case 0:
n = r << 1;
break;
case 1:
t += o(n | (r >> 14));
n = (r & 16383) << 2;
break;
case 2:
t += o(n | (r >> 13));
n = (r & 8191) << 3;
break;
case 3:
t += o(n | (r >> 12));
n = (r & 4095) << 4;
break;
case 4:
t += o(n | (r >> 11));
n = (r & 2047) << 5;
break;
case 5:
t += o(n | (r >> 10));
n = (r & 1023) << 6;
break;
case 6:
t += o(n | (r >> 9));
n = (r & 511) << 7;
break;
case 7:
t += o(n | (r >> 8));
n = (r & 255) << 8;
break;
case 8:
t += o(n | (r >> 7));
n = (r & 127) << 9;
break;
case 9:
t += o(n | (r >> 6));
n = (r & 63) << 10;
break;
case 10:
t += o(n | (r >> 5));
n = (r & 31) << 11;
break;
case 11:
t += o(n | (r >> 4));
n = (r & 15) << 12;
break;
case 12:
t += o(n | (r >> 3));
n = (r & 7) << 13;
break;
case 13:
t += o(n | (r >> 2));
n = (r & 3) << 14;
break;
case 14:
t += o(n | (r >> 1));
n = (r & 1) << 15;
break;
case 15:
t += o(n | r);
i = 0;
break;
}
s++;
}
return LZString.decompress(t);
},
compressToUint8Array: function (e) {
var t = LZString.compress(e);
var n = new Uint8Array(t.length * 2);
for (var r = 0, i = t.length; r < i; r++) {
var s = t.charCodeAt(r);
n[r * 2] = s >>> 8;
n[r * 2 + 1] = s % 256;
}
return n;
},
decompressFromUint8Array: function (e) {
if (e === null || e === undefined) {
return LZString.decompress(e);
} else {
var t = new Array(e.length / 2);
for (var n = 0, r = t.length; n < r; n++) {
t[n] = e[n * 2] * 256 + e[n * 2 + 1];
}
return LZString.decompress(String.fromCharCode.apply(null, t));
}
},
compressToEncodedURIComponent: function (e) {
return LZString.compressToBase64(e).replace(/=/g, "$").replace(/\//g, "-");
},
decompressFromEncodedURIComponent: function (e) {
if (e) e = e.replace(/$/g, "=").replace(/-/g, "/");
return LZString.decompressFromBase64(e);
},
compress: function (e) {
if (e == null) return "";
var t,
n,
r = {},
i = {},
s = "",
o = "",
u = "",
a = 2,
f = 3,
l = 2,
c = "",
h = 0,
p = 0,
d,
v = LZString._f;
for (d = 0; d < e.length; d += 1) {
s = e.charAt(d);
if (!Object.prototype.hasOwnProperty.call(r, s)) {
r[s] = f++;
i[s] = true;
}
o = u + s;
if (Object.prototype.hasOwnProperty.call(r, o)) {
u = o;
} else {
if (Object.prototype.hasOwnProperty.call(i, u)) {
if (u.charCodeAt(0) < 256) {
for (t = 0; t < l; t++) {
h = h << 1;
if (p == 15) {
p = 0;
c += v(h);
h = 0;
} else {
p++;
}
}
n = u.charCodeAt(0);
for (t = 0; t < 8; t++) {
h = (h << 1) | (n & 1);
if (p == 15) {
p = 0;
c += v(h);
h = 0;
} else {
p++;
}
n = n >> 1;
}
} else {
n = 1;
for (t = 0; t < l; t++) {
h = (h << 1) | n;
if (p == 15) {
p = 0;
c += v(h);
h = 0;
} else {
p++;
}
n = 0;
}
n = u.charCodeAt(0);
for (t = 0; t < 16; t++) {
h = (h << 1) | (n & 1);
if (p == 15) {
p = 0;
c += v(h);
h = 0;
} else {
p++;
}
n = n >> 1;
}
}
a--;
if (a == 0) {
a = Math.pow(2, l);
l++;
}
delete i[u];
} else {
n = r[u];
for (t = 0; t < l; t++) {
h = (h << 1) | (n & 1);
if (p == 15) {
p = 0;
c += v(h);
h = 0;
} else {
p++;
}
n = n >> 1;
}
}
a--;
if (a == 0) {
a = Math.pow(2, l);
l++;
}
r[o] = f++;
u = String(s);
}
}
if (u !== "") {
if (Object.prototype.hasOwnProperty.call(i, u)) {
if (u.charCodeAt(0) < 256) {
for (t = 0; t < l; t++) {
h = h << 1;
if (p == 15) {
p = 0;
c += v(h);
h = 0;
} else {
p++;
}
}
n = u.charCodeAt(0);
for (t = 0; t < 8; t++) {
h = (h << 1) | (n & 1);
if (p == 15) {
p = 0;
c += v(h);
h = 0;
} else {
p++;
}
n = n >> 1;
}
} else {
n = 1;
for (t = 0; t < l; t++) {
h = (h << 1) | n;
if (p == 15) {
p = 0;
c += v(h);
h = 0;
} else {
p++;
}
n = 0;
}
n = u.charCodeAt(0);
for (t = 0; t < 16; t++) {
h = (h << 1) | (n & 1);
if (p == 15) {
p = 0;
c += v(h);
h = 0;
} else {
p++;
}
n = n >> 1;
}
}
a--;
if (a == 0) {
a = Math.pow(2, l);
l++;
}
delete i[u];
} else {
n = r[u];
for (t = 0; t < l; t++) {
h = (h << 1) | (n & 1);
if (p == 15) {
p = 0;
c += v(h);
h = 0;
} else {
p++;
}
n = n >> 1;
}
}
a--;
if (a == 0) {
a = Math.pow(2, l);
l++;
}
}
n = 2;
for (t = 0; t < l; t++) {
h = (h << 1) | (n & 1);
if (p == 15) {
p = 0;
c += v(h);
h = 0;
} else {
p++;
}
n = n >> 1;
}
while (true) {
h = h << 1;
if (p == 15) {
c += v(h);
break;
} else p++;
}
return c;
},
decompress: function (e) {
if (e == null) return "";
if (e == "") return null;
var t = [],
n,
r = 4,
i = 4,
s = 3,
o = "",
u = "",
a,
f,
l,
c,
h,
p,
d,
v = LZString._f,
m = { string: e, val: e.charCodeAt(0), position: 32768, index: 1 };
for (a = 0; a < 3; a += 1) {
t[a] = a;
}
l = 0;
h = Math.pow(2, 2);
p = 1;
while (p != h) {
c = m.val & m.position;
m.position >>= 1;
if (m.position == 0) {
m.position = 32768;
m.val = m.string.charCodeAt(m.index++);
}
l |= (c > 0 ? 1 : 0) * p;
p <<= 1;
}
switch ((n = l)) {
case 0:
l = 0;
h = Math.pow(2, 8);
p = 1;
while (p != h) {
c = m.val & m.position;
m.position >>= 1;
if (m.position == 0) {
m.position = 32768;
m.val = m.string.charCodeAt(m.index++);
}
l |= (c > 0 ? 1 : 0) * p;
p <<= 1;
}
d = v(l);
break;
case 1:
l = 0;
h = Math.pow(2, 16);
p = 1;
while (p != h) {
c = m.val & m.position;
m.position >>= 1;
if (m.position == 0) {
m.position = 32768;
m.val = m.string.charCodeAt(m.index++);
}
l |= (c > 0 ? 1 : 0) * p;
p <<= 1;
}
d = v(l);
break;
case 2:
return "";
}
t[3] = d;
f = u = d;
while (true) {
if (m.index > m.string.length) {
return "";
}
l = 0;
h = Math.pow(2, s);
p = 1;
while (p != h) {
c = m.val & m.position;
m.position >>= 1;
if (m.position == 0) {
m.position = 32768;
m.val = m.string.charCodeAt(m.index++);
}
l |= (c > 0 ? 1 : 0) * p;
p <<= 1;
}
switch ((d = l)) {
case 0:
l = 0;
h = Math.pow(2, 8);
p = 1;
while (p != h) {
c = m.val & m.position;
m.position >>= 1;
if (m.position == 0) {
m.position = 32768;
m.val = m.string.charCodeAt(m.index++);
}
l |= (c > 0 ? 1 : 0) * p;
p <<= 1;
}
t[i++] = v(l);
d = i - 1;
r--;
break;
case 1:
l = 0;
h = Math.pow(2, 16);
p = 1;
while (p != h) {
c = m.val & m.position;
m.position >>= 1;
if (m.position == 0) {
m.position = 32768;
m.val = m.string.charCodeAt(m.index++);
}
l |= (c > 0 ? 1 : 0) * p;
p <<= 1;
}
t[i++] = v(l);
d = i - 1;
r--;
break;
case 2:
return u;
}
if (r == 0) {
r = Math.pow(2, s);
s++;
}
if (t[d]) {
o = t[d];
} else {
if (d === i) {
o = f + f.charAt(0);
} else {
return null;
}
}
u += o;
t[i++] = f + o.charAt(0);
r--;
f = o;
if (r == 0) {
r = Math.pow(2, s);
s++;
}
}
},
};
if (typeof module !== "undefined" && module != null) {
module.exports = LZString;
}

524
www/js/libs/pixi-picture.js Normal file
View file

@ -0,0 +1,524 @@
var __extends =
(this && this.__extends) ||
function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() {
this.constructor = d;
}
d.prototype =
b === null ? Object.create(b) : ((__.prototype = b.prototype), new __());
};
var PIXI;
(function (PIXI) {
var extras;
(function (extras) {
var shaderLib = [
{
vertUniforms: "",
vertCode: "vTextureCoord = aTextureCoord;",
fragUniforms: "uniform vec4 uTextureClamp;",
fragCode:
"vec2 textureCoord = clamp(vTextureCoord, uTextureClamp.xy, uTextureClamp.zw);",
},
{
vertUniforms: "uniform mat3 uTransform;",
vertCode: "vTextureCoord = (uTransform * vec3(aTextureCoord, 1.0)).xy;",
fragUniforms: "",
fragCode: "vec2 textureCoord = vTextureCoord;",
},
{
vertUniforms: "uniform mat3 uTransform;",
vertCode: "vTextureCoord = (uTransform * vec3(aTextureCoord, 1.0)).xy;",
fragUniforms:
"uniform mat3 uMapCoord;\nuniform vec4 uClampFrame;\nuniform vec2 uClampOffset;",
fragCode:
"vec2 textureCoord = mod(vTextureCoord - uClampOffset, vec2(1.0, 1.0)) + uClampOffset;" +
"\ntextureCoord = (uMapCoord * vec3(textureCoord, 1.0)).xy;" +
"\ntextureCoord = clamp(textureCoord, uClampFrame.xy, uClampFrame.zw);",
},
];
var PictureShader = (function (_super) {
__extends(PictureShader, _super);
function PictureShader(gl, vert, frag, tilingMode) {
var lib = shaderLib[tilingMode];
_super.call(
this,
gl,
vert
.replace(/%SPRITE_UNIFORMS%/gi, lib.vertUniforms)
.replace(/%SPRITE_CODE%/gi, lib.vertCode),
frag
.replace(/%SPRITE_UNIFORMS%/gi, lib.fragUniforms)
.replace(/%SPRITE_CODE%/gi, lib.fragCode)
);
this.bind();
this.tilingMode = tilingMode;
this.tempQuad = new PIXI.Quad(gl);
this.tempQuad.initVao(this);
this.uniforms.uColor = new Float32Array([1, 1, 1, 1]);
this.uniforms.uSampler = [0, 1];
}
PictureShader.blendVert =
"\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\nuniform mat3 mapMatrix;\n\nvarying vec2 vTextureCoord;\nvarying vec2 vMapCoord;\n%SPRITE_UNIFORMS%\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n %SPRITE_CODE%\n vMapCoord = (mapMatrix * vec3(aVertexPosition, 1.0)).xy;\n}\n";
return PictureShader;
})(PIXI.Shader);
extras.PictureShader = PictureShader;
})((extras = PIXI.extras || (PIXI.extras = {})));
})(PIXI || (PIXI = {}));
var PIXI;
(function (PIXI) {
var extras;
(function (extras) {
var overlayFrag =
"\nvarying vec2 vTextureCoord;\nvarying vec2 vMapCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler[2];\nuniform vec4 uColor;\n%SPRITE_UNIFORMS%\n\nvoid main(void)\n{\n %SPRITE_CODE%\n vec4 source = texture2D(uSampler[0], textureCoord) * uColor;\n vec4 target = texture2D(uSampler[1], vMapCoord);\n\n //reverse hardlight\n if (source.a == 0.0) {\n gl_FragColor = vec4(0, 0, 0, 0);\n return;\n }\n //yeah, premultiplied\n vec3 Cb = source.rgb/source.a, Cs;\n if (target.a > 0.0) {\n Cs = target.rgb / target.a;\n }\n vec3 multiply = Cb * Cs * 2.0;\n vec3 Cs2 = Cs * 2.0 - 1.0;\n vec3 screen = Cb + Cs2 - Cb * Cs2;\n vec3 B;\n if (Cb.r <= 0.5) {\n B.r = multiply.r;\n } else {\n B.r = screen.r;\n }\n if (Cb.g <= 0.5) {\n B.g = multiply.g;\n } else {\n B.g = screen.g;\n }\n if (Cb.b <= 0.5) {\n B.b = multiply.b;\n } else {\n B.b = screen.b;\n }\n vec4 res;\n res.xyz = (1.0 - source.a) * Cs + source.a * B;\n res.a = source.a + target.a * (1.0-source.a);\n gl_FragColor = vec4(res.xyz * res.a, res.a);\n}\n";
var HardLightShader = (function (_super) {
__extends(HardLightShader, _super);
function HardLightShader(gl, tilingMode) {
_super.call(
this,
gl,
extras.PictureShader.blendVert,
overlayFrag,
tilingMode
);
}
return HardLightShader;
})(extras.PictureShader);
extras.HardLightShader = HardLightShader;
})((extras = PIXI.extras || (PIXI.extras = {})));
})(PIXI || (PIXI = {}));
var PIXI;
(function (PIXI) {
var extras;
(function (extras) {
function mapFilterBlendModesToPixi(gl, array) {
if (array === void 0) {
array = [];
}
array[PIXI.BLEND_MODES.OVERLAY] = [
new extras.OverlayShader(gl, 0),
new extras.OverlayShader(gl, 1),
new extras.OverlayShader(gl, 2),
];
array[PIXI.BLEND_MODES.HARD_LIGHT] = [
new extras.HardLightShader(gl, 0),
new extras.HardLightShader(gl, 1),
new extras.HardLightShader(gl, 2),
];
return array;
}
extras.mapFilterBlendModesToPixi = mapFilterBlendModesToPixi;
})((extras = PIXI.extras || (PIXI.extras = {})));
})(PIXI || (PIXI = {}));
var PIXI;
(function (PIXI) {
var extras;
(function (extras) {
var normalFrag =
"\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler[2];\nuniform vec4 uColor;\n%SPRITE_UNIFORMS%\n\nvoid main(void)\n{\n %SPRITE_CODE%\n\n vec4 sample = texture2D(uSampler[0], textureCoord);\n gl_FragColor = sample * uColor;\n}\n";
var normalVert =
"\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aColor;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\n%SPRITE_UNIFORMS%\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n %SPRITE_CODE%\n}\n";
var NormalShader = (function (_super) {
__extends(NormalShader, _super);
function NormalShader(gl, tilingMode) {
_super.call(this, gl, normalVert, normalFrag, tilingMode);
}
return NormalShader;
})(extras.PictureShader);
extras.NormalShader = NormalShader;
})((extras = PIXI.extras || (PIXI.extras = {})));
})(PIXI || (PIXI = {}));
var PIXI;
(function (PIXI) {
var extras;
(function (extras) {
var overlayFrag =
"\nvarying vec2 vTextureCoord;\nvarying vec2 vMapCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler[2];\nuniform vec4 uColor;\n%SPRITE_UNIFORMS%\n\nvoid main(void)\n{\n %SPRITE_CODE%\n vec4 source = texture2D(uSampler[0], textureCoord) * uColor;\n vec4 target = texture2D(uSampler[1], vMapCoord);\n\n //reverse hardlight\n if (source.a == 0.0) {\n gl_FragColor = vec4(0, 0, 0, 0);\n return;\n }\n //yeah, premultiplied\n vec3 Cb = source.rgb/source.a, Cs;\n if (target.a > 0.0) {\n Cs = target.rgb / target.a;\n }\n vec3 multiply = Cb * Cs * 2.0;\n vec3 Cb2 = Cb * 2.0 - 1.0;\n vec3 screen = Cb2 + Cs - Cb2 * Cs;\n vec3 B;\n if (Cs.r <= 0.5) {\n B.r = multiply.r;\n } else {\n B.r = screen.r;\n }\n if (Cs.g <= 0.5) {\n B.g = multiply.g;\n } else {\n B.g = screen.g;\n }\n if (Cs.b <= 0.5) {\n B.b = multiply.b;\n } else {\n B.b = screen.b;\n }\n vec4 res;\n res.xyz = (1.0 - source.a) * Cs + source.a * B;\n res.a = source.a + target.a * (1.0-source.a);\n gl_FragColor = vec4(res.xyz * res.a, res.a);\n}\n";
var OverlayShader = (function (_super) {
__extends(OverlayShader, _super);
function OverlayShader(gl, tilingMode) {
_super.call(
this,
gl,
extras.PictureShader.blendVert,
overlayFrag,
tilingMode
);
}
return OverlayShader;
})(extras.PictureShader);
extras.OverlayShader = OverlayShader;
})((extras = PIXI.extras || (PIXI.extras = {})));
})(PIXI || (PIXI = {}));
var PIXI;
(function (PIXI) {
var extras;
(function (extras) {
function nextPow2(v) {
v += v === 0 ? 1 : 0;
--v;
v |= v >>> 1;
v |= v >>> 2;
v |= v >>> 4;
v |= v >>> 8;
v |= v >>> 16;
return v + 1;
}
var PictureRenderer = (function (_super) {
__extends(PictureRenderer, _super);
function PictureRenderer(renderer) {
_super.call(this, renderer);
}
PictureRenderer.prototype.onContextChange = function () {
var gl = this.renderer.gl;
this.drawModes = extras.mapFilterBlendModesToPixi(gl);
this.normalShader = [
new extras.NormalShader(gl, 0),
new extras.NormalShader(gl, 1),
new extras.NormalShader(gl, 2),
];
this._tempClamp = new Float32Array(4);
this._tempColor = new Float32Array(4);
this._tempRect = new PIXI.Rectangle();
this._tempRect2 = new PIXI.Rectangle();
this._tempRect3 = new PIXI.Rectangle();
this._tempMatrix = new PIXI.Matrix();
this._tempMatrix2 = new PIXI.Matrix();
this._bigBuf = new Uint8Array(1 << 20);
this._renderTexture = new PIXI.BaseRenderTexture(1024, 1024);
};
PictureRenderer.prototype.start = function () {};
PictureRenderer.prototype.flush = function () {};
PictureRenderer.prototype._getRenderTexture = function (
minWidth,
minHeight
) {
if (
this._renderTexture.width < minWidth ||
this._renderTexture.height < minHeight
) {
minHeight = nextPow2(minWidth);
minHeight = nextPow2(minHeight);
this._renderTexture.resize(minWidth, minHeight);
}
return this._renderTexture;
};
PictureRenderer.prototype._getBuf = function (size) {
var buf = this._bigBuf;
if (buf.length < size) {
size = nextPow2(size);
buf = new Uint8Array(size);
this._bigBuf = buf;
}
return buf;
};
PictureRenderer.prototype.render = function (sprite) {
if (!sprite.texture.valid) {
return;
}
var tilingMode = 0;
if (sprite.tileTransform) {
tilingMode = this._isSimpleSprite(sprite) ? 1 : 2;
}
var blendShader = this.drawModes[sprite.blendMode];
if (blendShader) {
this._renderBlend(sprite, blendShader[tilingMode]);
} else {
this._renderNormal(sprite, this.normalShader[tilingMode]);
}
};
PictureRenderer.prototype._renderNormal = function (sprite, shader) {
var renderer = this.renderer;
renderer.bindShader(shader);
renderer.state.setBlendMode(sprite.blendMode);
this._renderInner(sprite, shader);
};
PictureRenderer.prototype._renderBlend = function (sprite, shader) {
var renderer = this.renderer;
var spriteBounds = sprite.getBounds();
var renderTarget = renderer._activeRenderTarget;
var matrix = renderTarget.projectionMatrix;
var flipX = matrix.a < 0;
var flipY = matrix.d < 0;
var resolution = renderTarget.resolution;
var screen = this._tempRect;
var fr = renderTarget.sourceFrame || renderTarget.destinationFrame;
screen.x = 0;
screen.y = 0;
screen.width = fr.width;
screen.height = fr.height;
var bounds = this._tempRect2;
var fbw = fr.width * resolution,
fbh = fr.height * resolution;
bounds.x =
(spriteBounds.x + matrix.tx / matrix.a) * resolution + fbw / 2;
bounds.y =
(spriteBounds.y + matrix.ty / matrix.d) * resolution + fbh / 2;
bounds.width = spriteBounds.width * resolution;
bounds.height = spriteBounds.height * resolution;
if (flipX) {
bounds.y = fbw - bounds.width - bounds.x;
}
if (flipY) {
bounds.y = fbh - bounds.height - bounds.y;
}
var screenBounds = this._tempRect3;
var x_1 = Math.floor(Math.max(screen.x, bounds.x));
var x_2 = Math.ceil(
Math.min(screen.x + screen.width, bounds.x + bounds.width)
);
var y_1 = Math.floor(Math.max(screen.y, bounds.y));
var y_2 = Math.ceil(
Math.min(screen.y + screen.height, bounds.y + bounds.height)
);
var pixelsWidth = x_2 - x_1;
var pixelsHeight = y_2 - y_1;
if (pixelsWidth <= 0 || pixelsHeight <= 0) {
return;
}
var rt = this._getRenderTexture(pixelsWidth, pixelsHeight);
renderer.bindTexture(rt, 1, true);
var gl = renderer.gl;
if (renderer.renderingToScreen && renderTarget.root) {
var buf = this._getBuf(pixelsWidth * pixelsHeight * 4);
gl.readPixels(
x_1,
y_1,
pixelsWidth,
pixelsHeight,
gl.RGBA,
gl.UNSIGNED_BYTE,
this._bigBuf
);
gl.texSubImage2D(
gl.TEXTURE_2D,
0,
0,
0,
pixelsWidth,
pixelsHeight,
gl.RGBA,
gl.UNSIGNED_BYTE,
this._bigBuf
);
} else {
gl.copyTexSubImage2D(
gl.TEXTURE_2D,
0,
0,
0,
x_1,
y_1,
pixelsWidth,
pixelsHeight
);
}
renderer.bindShader(shader);
renderer.state.setBlendMode(PIXI.BLEND_MODES.NORMAL);
if (shader.uniforms.mapMatrix) {
var mapMatrix = this._tempMatrix;
mapMatrix.a = bounds.width / rt.width / spriteBounds.width;
if (flipX) {
mapMatrix.a = -mapMatrix.a;
mapMatrix.tx =
(bounds.x - x_1) / rt.width -
(spriteBounds.x + spriteBounds.width) * mapMatrix.a;
} else {
mapMatrix.tx =
(bounds.x - x_1) / rt.width - spriteBounds.x * mapMatrix.a;
}
mapMatrix.d = bounds.height / rt.height / spriteBounds.height;
if (flipY) {
mapMatrix.d = -mapMatrix.d;
mapMatrix.ty =
(bounds.y - y_1) / rt.height -
(spriteBounds.y + spriteBounds.height) * mapMatrix.d;
} else {
mapMatrix.ty =
(bounds.y - y_1) / rt.height - spriteBounds.y * mapMatrix.d;
}
shader.uniforms.mapMatrix = mapMatrix.toArray(true);
}
this._renderInner(sprite, shader);
};
PictureRenderer.prototype._renderInner = function (sprite, shader) {
var renderer = this.renderer;
if (shader.tilingMode > 0) {
this._renderWithShader(sprite, shader.tilingMode === 1, shader);
} else {
this._renderSprite(sprite, shader);
}
};
PictureRenderer.prototype._renderWithShader = function (
ts,
isSimple,
shader
) {
var quad = shader.tempQuad;
var renderer = this.renderer;
renderer.bindVao(quad.vao);
var vertices = quad.vertices;
var _width = ts._width;
var _height = ts._height;
var _anchorX = ts._anchor._x;
var _anchorY = ts._anchor._y;
var w0 = _width * (1 - _anchorX);
var w1 = _width * -_anchorX;
var h0 = _height * (1 - _anchorY);
var h1 = _height * -_anchorY;
var wt = ts.transform.worldTransform;
var a = wt.a;
var b = wt.b;
var c = wt.c;
var d = wt.d;
var tx = wt.tx;
var ty = wt.ty;
vertices[0] = a * w1 + c * h1 + tx;
vertices[1] = d * h1 + b * w1 + ty;
vertices[2] = a * w0 + c * h1 + tx;
vertices[3] = d * h1 + b * w0 + ty;
vertices[4] = a * w0 + c * h0 + tx;
vertices[5] = d * h0 + b * w0 + ty;
vertices[6] = a * w1 + c * h0 + tx;
vertices[7] = d * h0 + b * w1 + ty;
vertices = quad.uvs;
vertices[0] = vertices[6] = -ts.anchor.x;
vertices[1] = vertices[3] = -ts.anchor.y;
vertices[2] = vertices[4] = 1.0 - ts.anchor.x;
vertices[5] = vertices[7] = 1.0 - ts.anchor.y;
quad.upload();
var tex = ts._texture;
var lt = ts.tileTransform.localTransform;
var uv = ts.uvTransform;
var mapCoord = uv.mapCoord;
var uClampFrame = uv.uClampFrame;
var uClampOffset = uv.uClampOffset;
var w = tex.width;
var h = tex.height;
var W = _width;
var H = _height;
var tempMat = this._tempMatrix2;
tempMat.set(
(lt.a * w) / W,
(lt.b * w) / H,
(lt.c * h) / W,
(lt.d * h) / H,
lt.tx / W,
lt.ty / H
);
tempMat.invert();
if (isSimple) {
tempMat.append(mapCoord);
} else {
shader.uniforms.uMapCoord = mapCoord.toArray(true);
shader.uniforms.uClampFrame = uClampFrame;
shader.uniforms.uClampOffset = uClampOffset;
}
shader.uniforms.uTransform = tempMat.toArray(true);
var color = this._tempColor;
var alpha = ts.worldAlpha;
PIXI.utils.hex2rgb(ts.tint, color);
color[0] *= alpha;
color[1] *= alpha;
color[2] *= alpha;
color[3] = alpha;
shader.uniforms.uColor = color;
renderer.bindTexture(tex, 0, true);
quad.vao.draw(this.renderer.gl.TRIANGLES, 6, 0);
};
PictureRenderer.prototype._renderSprite = function (sprite, shader) {
var renderer = this.renderer;
var quad = shader.tempQuad;
renderer.bindVao(quad.vao);
var uvs = sprite.texture._uvs;
var vertices = quad.vertices;
var vd = sprite.vertexData;
for (var i = 0; i < 8; i++) {
quad.vertices[i] = vd[i];
}
quad.uvs[0] = uvs.x0;
quad.uvs[1] = uvs.y0;
quad.uvs[2] = uvs.x1;
quad.uvs[3] = uvs.y1;
quad.uvs[4] = uvs.x2;
quad.uvs[5] = uvs.y2;
quad.uvs[6] = uvs.x3;
quad.uvs[7] = uvs.y3;
quad.upload();
var frame = sprite.texture.frame;
var base = sprite.texture.baseTexture;
var clamp = this._tempClamp;
var eps = 0.5 / base.resolution;
clamp[0] = (frame.x + eps) / base.width;
clamp[1] = (frame.y + eps) / base.height;
clamp[2] = (frame.x + frame.width - eps) / base.width;
clamp[3] = (frame.y + frame.height - eps) / base.height;
shader.uniforms.uTextureClamp = clamp;
var color = this._tempColor;
PIXI.utils.hex2rgb(sprite.tint, color);
var alpha = sprite.worldAlpha;
color[0] *= alpha;
color[1] *= alpha;
color[2] *= alpha;
color[3] = alpha;
shader.uniforms.uColor = color;
renderer.bindTexture(base, 0, true);
quad.vao.draw(this.renderer.gl.TRIANGLES, 6, 0);
};
PictureRenderer.prototype._isSimpleSprite = function (ts) {
var renderer = this.renderer;
var tex = ts._texture;
var baseTex = tex.baseTexture;
var isSimple =
baseTex.isPowerOfTwo &&
tex.frame.width === baseTex.width &&
tex.frame.height === baseTex.height;
if (isSimple) {
if (!baseTex._glTextures[renderer.CONTEXT_UID]) {
if (baseTex.wrapMode === PIXI.WRAP_MODES.CLAMP) {
baseTex.wrapMode = PIXI.WRAP_MODES.REPEAT;
}
} else {
isSimple = baseTex.wrapMode !== PIXI.WRAP_MODES.CLAMP;
}
}
return isSimple;
};
return PictureRenderer;
})(PIXI.ObjectRenderer);
extras.PictureRenderer = PictureRenderer;
PIXI.WebGLRenderer.registerPlugin("picture", PictureRenderer);
PIXI.CanvasRenderer.registerPlugin("picture", PIXI.CanvasSpriteRenderer);
})((extras = PIXI.extras || (PIXI.extras = {})));
})(PIXI || (PIXI = {}));
var PIXI;
(function (PIXI) {
var extras;
(function (extras) {
var PictureSprite = (function (_super) {
__extends(PictureSprite, _super);
function PictureSprite(texture) {
_super.call(this, texture);
this.pluginName = "picture";
}
return PictureSprite;
})(PIXI.Sprite);
extras.PictureSprite = PictureSprite;
})((extras = PIXI.extras || (PIXI.extras = {})));
})(PIXI || (PIXI = {}));
var PIXI;
(function (PIXI) {
var extras;
(function (extras) {
var PictureTilingSprite = (function (_super) {
__extends(PictureTilingSprite, _super);
function PictureTilingSprite(texture) {
_super.call(this, texture);
this.pluginName = "picture";
}
return PictureTilingSprite;
})(extras.TilingSprite);
extras.PictureTilingSprite = PictureTilingSprite;
})((extras = PIXI.extras || (PIXI.extras = {})));
})(PIXI || (PIXI = {}));
//# sourceMappingURL=pixi-picture.js.map

1113
www/js/libs/pixi-tilemap.js Normal file

File diff suppressed because it is too large Load diff

48989
www/js/libs/pixi.js Normal file

File diff suppressed because it is too large Load diff

9
www/js/main.js Normal file
View file

@ -0,0 +1,9 @@
//=============================================================================
// main.js
//=============================================================================
PluginManager.setup($plugins);
window.onload = function () {
SceneManager.run(Scene_Boot);
};

12065
www/js/plugins.js Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,42 @@
//=============================================================================
// Actor Stepping Animation
// by Shaz
// Last Updated: 2015.10.21
//=============================================================================
/*:
* @plugindesc Allows party leader/followers to have stepping anim on map
* @author Shaz
*
* @help This plugin does not provide plugin commands.
*
* Add <stepanim> to the note box of an Actor to turn on stepping animation
* for the actor's sprite on the map, as the party leader or a follower.
*
*/
/*:ja
* @plugindesc マップ上でパーティリーダー及びフォロワーに
* 足踏みのアニメーションを追加します
* @author Shaz
*
* @help このプラグインはプラグインコマンドを含みません
*
* アクターに足踏みアニメーションを付与したい場合は
* ノートボックスに <stepanim> というコードを挿入してください
*
*/
(function () {
var _Game_Player_update = Game_Player.prototype.update;
Game_Player.prototype.update = function (sceneActive) {
_Game_Player_update.call(this, sceneActive);
this.setStepAnime($gameParty.leader().actor().meta.stepanim || false);
};
var _Game_Follower_update = Game_Follower.prototype.update;
Game_Follower.prototype.update = function () {
_Game_Follower_update.call(this);
this.setStepAnime(this.actor().actor().meta.stepanim || false);
};
})();

View file

@ -0,0 +1,90 @@
//=============================================================================
// AltMenuScreen.js
//=============================================================================
/*:
* @plugindesc Alternative menu screen layout.
* @author Yoji Ojima
*
* @help This plugin does not provide plugin commands.
*/
/*:ja
* @plugindesc メニュー画面のレイアウトを変更します
* @author Yoji Ojima
*
* @help このプラグインにはプラグインコマンドはありません
*/
(function () {
var _Scene_Menu_create = Scene_Menu.prototype.create;
Scene_Menu.prototype.create = function () {
_Scene_Menu_create.call(this);
this._statusWindow.x = 0;
this._statusWindow.y = this._commandWindow.height;
this._goldWindow.x = Graphics.boxWidth - this._goldWindow.width;
};
Window_MenuCommand.prototype.windowWidth = function () {
return Graphics.boxWidth;
};
Window_MenuCommand.prototype.maxCols = function () {
return 4;
};
Window_MenuCommand.prototype.numVisibleRows = function () {
return 2;
};
Window_MenuStatus.prototype.windowWidth = function () {
return Graphics.boxWidth;
};
Window_MenuStatus.prototype.windowHeight = function () {
var h1 = this.fittingHeight(1);
var h2 = this.fittingHeight(2);
return Graphics.boxHeight - h1 - h2;
};
Window_MenuStatus.prototype.maxCols = function () {
return 4;
};
Window_MenuStatus.prototype.numVisibleRows = function () {
return 1;
};
Window_MenuStatus.prototype.drawItemImage = function (index) {
var actor = $gameParty.members()[index];
var rect = this.itemRectForText(index);
var w = Math.min(rect.width, 144);
var h = Math.min(rect.height, 144);
var lineHeight = this.lineHeight();
this.changePaintOpacity(actor.isBattleMember());
this.drawActorFace(actor, rect.x, rect.y + lineHeight * 2.5, w, h);
this.changePaintOpacity(true);
};
Window_MenuStatus.prototype.drawItemStatus = function (index) {
var actor = $gameParty.members()[index];
var rect = this.itemRectForText(index);
var x = rect.x;
var y = rect.y;
var width = rect.width;
var bottom = y + rect.height;
var lineHeight = this.lineHeight();
this.drawActorName(actor, x, y + lineHeight * 0, width);
this.drawActorLevel(actor, x, y + lineHeight * 1, width);
this.drawActorClass(actor, x, bottom - lineHeight * 4, width);
this.drawActorHp(actor, x, bottom - lineHeight * 3, width);
this.drawActorMp(actor, x, bottom - lineHeight * 2, width);
this.drawActorIcons(actor, x, bottom - lineHeight * 1, width);
};
var _Window_MenuActor_initialize = Window_MenuActor.prototype.initialize;
Window_MenuActor.prototype.initialize = function () {
_Window_MenuActor_initialize.call(this);
this.y = this.fittingHeight(2);
};
})();

View file

@ -0,0 +1,132 @@
//=============================================================================
// AltSaveScreen.js
//=============================================================================
/*:
* @plugindesc Alternative save/load screen layout.
* @author Yoji Ojima
*
* @help This plugin does not provide plugin commands.
*/
/*:ja
* @plugindesc セーブロード画面のレイアウトを変更します
* @author Yoji Ojima
*
* @help このプラグインにはプラグインコマンドはありません
*/
(function () {
var _Scene_File_create = Scene_File.prototype.create;
Scene_File.prototype.create = function () {
_Scene_File_create.call(this);
this._listWindow.height = this._listWindow.fittingHeight(8);
var x = 0;
var y = this._listWindow.y + this._listWindow.height;
var width = Graphics.boxWidth;
var height = Graphics.boxHeight - y;
this._statusWindow = new Window_SavefileStatus(x, y, width, height);
this._statusWindow.setMode(this.mode());
this._listWindow.statusWindow = this._statusWindow;
this._listWindow.callUpdateHelp();
this.addWindow(this._statusWindow);
};
var _Scene_File_start = Scene_File.prototype.start;
Scene_File.prototype.start = function () {
_Scene_File_start.call(this);
this._listWindow.ensureCursorVisible();
this._listWindow.callUpdateHelp();
};
Window_SavefileList.prototype.windowWidth = function () {
return Graphics.boxWidth;
};
Window_SavefileList.prototype.maxCols = function () {
return 4;
};
Window_SavefileList.prototype.numVisibleRows = function () {
return 5;
};
Window_SavefileList.prototype.spacing = function () {
return 8;
};
Window_SavefileList.prototype.itemHeight = function () {
return this.lineHeight() * 2;
};
var _Window_SavefileList_callUpdateHelp =
Window_SavefileList.prototype.callUpdateHelp;
Window_SavefileList.prototype.callUpdateHelp = function () {
_Window_SavefileList_callUpdateHelp.call(this);
if (this.active && this.statusWindow) {
this.statusWindow.setId(this.index() + 1);
}
};
function Window_SavefileStatus() {
this.initialize.apply(this, arguments);
}
Window_SavefileStatus.prototype = Object.create(Window_Base.prototype);
Window_SavefileStatus.prototype.constructor = Window_SavefileStatus;
Window_SavefileStatus.prototype.initialize = function (x, y, width, height) {
Window_Base.prototype.initialize.call(this, x, y, width, height);
this._id = 1;
};
Window_SavefileStatus.prototype.setMode = function (mode) {
this._mode = mode;
};
Window_SavefileStatus.prototype.setId = function (id) {
this._id = id;
this.refresh();
};
Window_SavefileStatus.prototype.refresh = function () {
this.contents.clear();
var id = this._id;
var valid = DataManager.isThisGameFile(id);
var info = DataManager.loadSavefileInfo(id);
var rect = this.contents.rect;
this.resetTextColor();
if (this._mode === "load") {
this.changePaintOpacity(valid);
}
this.drawFileId(id, rect.x, rect.y);
if (info) {
this.changePaintOpacity(valid);
this.drawContents(info, rect, valid);
this.changePaintOpacity(true);
}
};
Window_SavefileStatus.prototype.drawFileId = function (id, x, y) {
this.drawText(TextManager.file + " " + id, x, y, 180);
};
Window_SavefileStatus.prototype.drawContents = function (info, rect, valid) {
var bottom = rect.y + rect.height;
var playtimeY = bottom - this.lineHeight();
this.drawText(info.title, rect.x + 192, rect.y, rect.width - 192);
if (valid) {
this.drawPartyfaces(info, rect.x, bottom - 144);
}
this.drawText(info.playtime, rect.x, playtimeY, rect.width, "right");
};
Window_SavefileStatus.prototype.drawPartyfaces = function (info, x, y) {
if (info && info.faces) {
for (var i = 0; i < info.faces.length; i++) {
var data = info.faces[i];
this.drawFace(data[0], data[1], x + i * 150, y);
}
}
};
})();

View file

@ -0,0 +1,68 @@
//=============================================================================
// Battle Mode
// by Shaz
// Last Updated: 2015.10.21
//=============================================================================
/*:
* @plugindesc Allows side view and front view battles in the same game
* @author Shaz
*
* @help This plugin does not provide plugin commands.
*
* Prefix a troop name with SV to set battles with that troop to side view
* Prefix a troop name with FV to set battles with that troop to front view
* Prefix a troop name with RV to set a random view for each battle with that troop
* Leave out the prefix to take the system default
*
*/
/*:ja
* @plugindesc 同一ゲーム内で戦闘時のサイドビューと
* フロントビューの両方を提供します
* @author Shaz
*
* @help このプラグインはプラグインコマンドを含みません
*
* 部隊名の頭にSVとつけることでその部隊との戦闘はサイドビューで展開されます
* 部隊名の頭にFVとつけることでその部隊との戦闘はフロントビューで展開されます
* 部隊名の頭にRVとつけることでその部隊との戦闘ビューはランダムに決定されます
*
*上記を削除すればデフォルト設定に戻ります
*
*/
(function () {
var _Game_System_isSideView = Game_System.prototype.isSideView;
Game_System.prototype.isSideView = function () {
if ($gameParty.inBattle) {
var sv = $gameTroop.isSideView();
if (sv === null) {
return _Game_System_isSideView.call(this);
} else {
return sv;
}
} else {
return _Game_System_isSideView.call(this);
}
};
var _Game_Troop_setup = Game_Troop.prototype.setup;
Game_Troop.prototype.setup = function (troopId) {
_Game_Troop_setup.call(this, troopId);
if (this.troop().name.match(/^SV/)) {
this._isSideView = true;
} else if (this.troop().name.match(/^FV/)) {
this._isSideView = false;
} else if (this.troop().name.match(/^RV/)) {
this._isSideView = Math.random() < 0.5;
} else {
this._isSideView = null;
}
};
Game_Troop.prototype.isSideView = function () {
return this._isSideView;
};
})();

View file

@ -0,0 +1,84 @@
//=============================================================================
// CAO-ShopAddItem.js
//=============================================================================
/*:
* @plugindesc ショップの商品を動的に決定します
* @author CACAO
*
* @help
* プラグインコマンドを使用して商品の準備開店を行います
*
* [Shop prepare]
* 商品の準備モードにします
* イベントコマンドショップの処理で追加します
*
* [Shop open]
* ショップを起動します
*
* [Shop open buyonly]
* 購入のみでショップを起動します
*
* [Shop cancel]
* 準備を中止します
* 以降イベントコマンドショップの処理が通常通り処理されます
*
*/
(function () {
var _cao_addgoods_Game_Interpreter_pluginCommand =
Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function (cmd, args) {
_cao_addgoods_Game_Interpreter_pluginCommand.call(this, cmd, args);
if (cmd !== "Shop") return;
if (args[0] === "open") {
$gameTemp.openShop(args[1] === "buyonly");
} else if (args[0] === "prepare") {
$gameTemp.prepareShopGoods();
} else if (args[0] === "cancel") {
$gameTemp.cancelShopAddMode();
}
};
var _cao_Game_Temp_initialize = Game_Temp.prototype.initialize;
Game_Temp.prototype.initialize = function () {
_cao_Game_Temp_initialize.call(this);
this._isShopAddMode = false;
this._shopGoods = [];
};
Game_Temp.prototype.isShopAddMode = function () {
return this._isShopAddMode;
};
Game_Temp.prototype.prepareShopGoods = function () {
this._shopGoods = [];
this._isShopAddMode = true;
};
Game_Temp.prototype.cancelShopAddMode = function () {
this._shopGoods = [];
this._isShopAddMode = false;
};
Game_Temp.prototype.addShopItem = function (item) {
this._shopGoods.push(item);
};
Game_Temp.prototype.openShop = function (buyOnly) {
if (!$gameParty.inBattle()) {
this._isShopAddMode = false;
SceneManager.push(Scene_Shop);
SceneManager.prepareNextScene(this._shopGoods, buyOnly);
}
};
// Shop Processing
var _cao_Game_Interpreter_command302 = Game_Interpreter.prototype.command302;
Game_Interpreter.prototype.command302 = function () {
if ($gameTemp.isShopAddMode()) {
$gameTemp.addShopItem(this._params);
while (this.nextEventCode() === 605) {
this._index++;
$gameTemp.addShopItem(this.currentCommand().parameters);
}
} else {
return _cao_Game_Interpreter_command302.call(this);
}
return true;
};
})();

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,772 @@
/*
############################################
作者: COBRA
改造や配布好き勝手にしても大丈夫だよ
寧ろ積極的に配布して皆のゲーム開発を快適にしてあげて
http://cobrara.blogspot.jp/
############################################
*/
// Version 1.1.5
// 2021/8/25 なんかセーブthis.availablePage.lengthがおかしかったらしい
// 2021/5/20 ページ切り替える時←も→も同じ挙動になってました
// 2020/4/23 \C[0]に対応してませんでした
// 2018/4/26 ロードした際ステータスの変更もロードされるよう修正
// 2017/12/13 最新のバージョン(1.5)でデプロイメントすると1回目だけ画像が表示されない問題を修正
// 2017/8/27 1.1.0 ページの表示・非表示機能を追加しました
// 2017/7/30 1.0.4 最新のコアスクリプト(ver1.2c)にも対応しました
// 2017/5/4 1.0.3 エロステータス画面を開いてる最中NPCが動いてしまう問題を修正しました
// 2017/1/31 1.0.2 changeにおいて最後の項目に「@@,@_,@=」が含まれている場合エスケープされない問題を修正しました
// 2017/1/30 1.0.1 ピクチャ名に変数が反映されないバグを修正しました
// 2017/1/24 1.0.0
/*:
* @plugindesc エロステータス作れちゃうプラグイン(本体)
* @author COBRA
* @help Version 1.1.3
* 自由にいじれちゃうエロステータス画面
*
* 画像はimg/picturesにpngで保存してください
*
* 0pxの画像を表示しようとするとバグります
*
*
* 詳しくはこちらで
* http://cobrara.blogspot.jp/2017/01/blog-post_24.html
*
* 横幅816 縦幅624
* @param eroStaName
* @desc メニューに表示される名前だよ
* Default: エロステータス
* @default エロステータス
*
*
* @param
*
*
* @param commonEvent
* @desc エロステ画面を開く直前に実行されるコモンイベント数値
* Default:
* @default
*/
var CBR_eroStatus = [];
var CBR_eroStatusState = {};
//表示するページ変える
Game_System.prototype.CBR_eroSta_page = function (list) {
this.availablePage = list;
CBR_eroStatusState.num = this.availablePage;
};
//起動・ロード・ニューゲーム時
var _CBR_Game_System_initialize = Game_System.prototype.initialize;
Game_System.prototype.initialize = function () {
_CBR_Game_System_initialize.call(this);
//初期値
CBR_eroStatus = [];
CBR_eroStatusState.num = [];
CBR_eroStatusState.numOrigin = [];
CBR_eroStatusState.now = null;
CBR_eroStatusState.name = null;
CBR_eroStatusState.event = null;
this.availablePage = [];
//ページ数取得
//こっちがあったら
for (var i = 0, len = $plugins.length; i < len; i++) {
var temp = $plugins[i].name.match(/^CBR_eroStatus_(\d+)/); //プラグインが存在して
if (temp) {
CBR_eroStatusState.numOrigin[CBR_eroStatusState.numOrigin.length] =
Number(temp[1]);
CBR_eroStatusState.num[CBR_eroStatusState.num.length] = Number(temp[1]);
}
}
//変更箇所の保存
CBR_eroStatusState.numOrigin.sort(function (a, b) {
return a - b;
}); //_nの小さい順に
this._CBR_eroSta_change_list = [];
//numOriginに[1,2,4,8]ってページが入ってる
//numには表示すべき[2,4]だけが入ってる
//エロステには[obj,obj,obj,obj]とOriginに対応した順番で入ってる
this._CBR_eroSta_pageList = [];
var param = PluginManager.parameters("CBR_eroStatus_main");
CBR_eroStatusState.name = "" + (param["eroStaName"] || "エロステータス");
CBR_eroStatusState.event = Number(param["commonEvent"]) || null;
for (var i = 0, len = CBR_eroStatusState.numOrigin.length; i < len; i++) {
//ページの数だけ
var n = CBR_eroStatusState.numOrigin[i];
var param = PluginManager.parameters("CBR_eroStatus_" + n);
//nは_n.js 1,2,3
//iはページの順番  0,1,2
//保存する場合は0から99
CBR_eroStatus[i] = { p: [], t: [] };
this._CBR_eroSta_change_list[i] = {
p: [],
t: [],
};
for (var k = 1; k < 100; k++) {
this.CBR_eroSta_add(
"p",
i,
k - 1,
param["picName_" + k],
param["picX_" + k],
param["picY_" + k],
param["picOrigin_" + k],
param["picShow_" + k],
param["picOpacity_" + k],
param["picZoom_" + k]
);
this.CBR_eroSta_add(
"t",
i,
k - 1,
param["txtSubject_" + k],
param["txtX_" + k],
param["txtY_" + k],
param["txtOrigin_" + k],
param["txtShow_" + k],
param["txtAlign_" + k],
param["txtSize_" + k]
);
}
}
this._CBR_eroSta_change_list = [];
for (var i = 0, len = CBR_eroStatusState.numOrigin.length; i < len; i++) {
//ページ分だけチェンジリスト作る
this._CBR_eroSta_change_list[i] = {
p: [],
t: [],
};
}
};
//セーブデータ読み込み時に実行
var _CBR_Game_System_onAfterLoad = Game_System.prototype.onAfterLoad;
Game_System.prototype.onAfterLoad = function () {
_CBR_Game_System_onAfterLoad.call(this);
if (this.availablePage && this.availablePage.length) {
CBR_eroStatusState.num = this.availablePage;
}
for (var i = 0, len = CBR_eroStatusState.numOrigin.length; i < len; i++) {
//ページ数分繰り返す
for (var j = 0; j < 2; j++) {
var ty = !j ? "p" : "t";
var list = this._CBR_eroSta_change_list[i][ty]; //変更したいナンバーリスト
for (var k = 0, len2 = list.length; k < len2; k++) {
var koumokuList = list[k].list;
for (var m = 0, len3 = koumokuList.length; m < len3; m++) {
//チェンジする項目数
if (!CBR_eroStatus[i][ty][list[k].page]) {
//その項目のデフォが存在しなかったら作成
this.CBR_eroSta_add(ty, i);
}
CBR_eroStatus[i][ty][list[k].num][koumokuList[m].name] =
koumokuList[m].val;
}
}
}
}
};
Game_System.prototype.CBR_eroSta_getPageIndex = function (num) {
//aはaligin or opacity bはzoom
var ary = CBR_eroStatusState.numOrigin;
for (var i = 0, len = ary.length; i < len; i++) {
if (ary[i] == num) {
return i;
}
}
};
Game_System.prototype.CBR_eroSta_add = function (
type,
page,
num,
data,
x,
y,
origin,
show,
a,
b
) {
//aはaligin or opacity bはzoom
if (type == "p") {
CBR_eroStatus[page].p[num] = {
name: data,
x: this.CBR_eroSta_changeVal("x", x),
y: this.CBR_eroSta_changeVal("y", y),
origin: origin || "left",
show: show == "on",
opacity: this.CBR_eroSta_changeVal("opacity", a),
zoom: this.CBR_eroSta_changeVal("zoom", b),
};
} else if (type == "t") {
CBR_eroStatus[page].t[num] = {
subject: data,
x: this.CBR_eroSta_changeVal("x", x),
y: this.CBR_eroSta_changeVal("y", y),
origin: origin || "left",
show: show == "on",
align: a || "top",
size: this.CBR_eroSta_changeVal("size", b),
};
}
};
Game_System.prototype.CBR_eroSta_changeVal = function (name, val) {
//チェンジする時 add時 ロード時のチェンジで反映させよう
switch (name) {
case "x":
case "y":
return Number(val) || 0;
break;
case "opacity":
case "zoom":
if (val) {
return Number(val) / 100;
} else {
return 1;
}
break;
case "show":
return val == "on";
break;
case "size":
return Number(val) || 28;
break;
case "name":
case "subject":
return val || "";
break;
default:
return val;
break;
}
};
Game_System.prototype.CBR_eroSta_change = function (ary) {
var txt_ary = {
fontsize: "fontSize",
vardigit: "varDigit",
};
var checkList = {
p: ["name", "origin", "x", "y", "show", "opacity", "zoom"],
t: ["subject", "origin", "x", "y", "show", "align", "size"],
};
for (var i = 0, len = ary.length; i < len; i++) {
//変更したいpage_type_nの分だけ
var temp = ary[i].split(/@@|@_|@=|_|=/);
var temp2 = ary[i].match(/@@|@_|@=|_|=/g);
var list = []; //aryを分割したものを入れる
var temp3 = "";
for (var k = 0, len2 = temp.length; k < len2; k++) {
if (temp2[k]) {
if (temp2[k].charAt(0) == "@") {
temp3 += temp[k] + temp2[k].charAt(1);
} else {
list[list.length] = temp3 + temp[k];
temp3 = "";
}
} else {
list[list.length] = temp3 + temp[k];
}
}
list[0] = Number(list[0]);
var page = null;
for (var k = 0, len2 = CBR_eroStatusState.numOrigin.length; k < len2; k++) {
//ページ数だけ回す
if (CBR_eroStatusState.numOrigin[k] == list[0]) {
//nと一致したら
page = k;
}
}
var type = list[1];
var n = Number(list[2]) - 1;
//しつこい気もするけどエロステータス開く時の軽さを最優先で
var obj = this._CBR_eroSta_change_list[page][type];
var objNum = false;
for (var k = 0, len2 = obj.length; k < len2; k++) {
//このページのchange数
if (n == obj[k].num) {
//nとチェンジしたい番号が一緒だったら
objNum = k;
break;
}
}
if (objNum === false) {
objNum = len2;
obj[objNum] = {
num: n,
list: [],
};
}
//変更したいパラメータ数だけ回す
var chaList = obj[objNum].list;
for (var k = 3, len2 = list.length; k + 1 < len2; k += 2) {
var listNum = false;
for (var m = 0, len3 = chaList.length; m < len3; m++) {
//既に存在するチェンジ数
if (list[k] == chaList[m].name) {
//一致する箇所があるかどうか
listNum = m;
break;
}
}
if (listNum === false) {
//無かったら
listNum = len3;
for (var m = 0, len3 = checkList[type].length; m < len3; m++) {
//ちゃんと項目通りかチェック
if (list[k] == checkList[type][m]) {
break;
} else if (m + 1 == len3) {
//もし無かったら
alert("ERROR:CBR_eroSta_change引数");
}
}
}
list[k + 1] = this.CBR_eroSta_changeVal(list[k], list[k + 1]);
chaList[listNum] = {
name: list[k],
val: list[k + 1],
};
CBR_eroStatus[page][type][n][list[k]] = list[k + 1];
}
}
};
//########### Scene ###########
function Scene_EroStatus() {
this.initialize.apply(this, arguments);
}
Scene_EroStatus.prototype = Object.create(Scene_MenuBase.prototype);
Scene_EroStatus.prototype.constructor = Scene_EroStatus;
Scene_EroStatus.prototype.initialize = function () {
Scene_MenuBase.prototype.initialize.call(this);
};
Scene_EroStatus.prototype.create = function () {
Scene_MenuBase.prototype.create.call(this);
if (CBR_eroStatusState.event) {
$gameTemp.reserveCommonEvent(CBR_eroStatusState.event);
}
this._eroStatusWindow = new Window_EroStatus();
this._eroStatusWindow.setHandler("cancel", this.popScene.bind(this));
this._eroStatusWindow._margin = 0; //背景ピッチリする為
this._eroStatusWindow.margin = 0; //本当はこっちだけどね
this._eroStatusWindow._windowFrameSprite.visible = false; //枠線を消す
this.addWindow(this._eroStatusWindow);
};
Scene_EroStatus.prototype.update = function () {
$gameMap.refreshIfNeeded();
if (this.isActive()) {
$gameMap.updateInterpreter();
}
$gameMap.updateVehicles();
Scene_Base.prototype.update.call(this);
};
//########### window ###########
function Window_EroStatus() {
this.initialize.apply(this, arguments);
}
Window_EroStatus.prototype = Object.create(Window_Selectable.prototype);
Window_EroStatus.prototype.constructor = Window_EroStatus;
Window_EroStatus.prototype.initialize = function () {
//windowを作る
var width = Graphics.boxWidth;
var height = Graphics.boxHeight;
Window_Selectable.prototype.initialize.call(this, 0, 0, width, height);
CBR_eroStatusState.now = 0;
this._CBR_complete = false;
};
Window_EroStatus.prototype.CBR_complete = function () {
//描写終わったかどうか
return this._CBR_complete;
};
Window_EroStatus.prototype.update = function () {
//毎回image描写してもいいけどそれだと負荷が多くなるのでこの方法で
Window_Selectable.prototype.update.call(this);
if (1 < CBR_eroStatusState.num.length && this.isOpenAndActive()) {
//操作があった時
if (Input.isRepeated("right")) {
SoundManager.playCursor(2); //音楽鳴らす
CBR_eroStatusState.now =
CBR_eroStatusState.now + 1 < CBR_eroStatusState.num.length
? CBR_eroStatusState.now + 1
: 0;
this._CBR_complete = false; //初期化
//this._statusWindow.refresh();//切り替えしたんでリフレッシュ
} else if (Input.isRepeated("left")) {
SoundManager.playCursor(2); //音楽鳴らす
CBR_eroStatusState.now =
CBR_eroStatusState.now < 1
? CBR_eroStatusState.num.length - 1
: CBR_eroStatusState.now - 1;
this._CBR_complete = false; //初期化
}
}
var page = $gameSystem.CBR_eroSta_getPageIndex(
CBR_eroStatusState.num[CBR_eroStatusState.now]
);
if (!this.CBR_complete()) {
//まだ画像の描写してないのなら
var flag = false;
var ary = CBR_eroStatus[page].p;
var p_data = [];
//ピクチャの数だけ
for (var i = 0, len = ary.length; i < len; i++) {
var name = ary[i].name;
if (!name || !ary[i].show) {
continue;
}
name = name.replace(
/\\(\\)|\\([VNP])\[(\d+)\]|\\(<)(.+)\\>/g,
function (a, b, c, d, e, f) {
//汚いけどこれは毎回やらないとね
if (b) {
//\\
return "\\";
} else if (c) {
//[VNP]
d = Number(d);
switch (c) {
case "V":
return $gameVariables.value(d);
break;
case "N":
return $gameActors._data[d]._name;
break;
case "P":
return $dataActors[$gameParty._actors[d - 1]].name;
break;
}
} else {
//script
return eval(f);
}
}
);
if (ary[i].var) {
//変数があったら入れる
var v = "" + $gameVariables.value(ary[i].var);
if (ary[i].varDigit) {
//2ケタの時は2まで
if (v.length >= ary[i].varDigit) {
name += v.substr(-1 * ary[i].varDigit, 1);
} else {
name = false;
}
} else {
name += v;
}
}
if (name) {
var temp = ImageManager.loadPicture(name); //初回読み込み
if (temp) {
//if(temp._isLoading || temp._loadingState == 'requesting'){//前者は古いver用 ロード中ならアウト
if (!temp.width) {
//前者は古いver用 ロード中ならアウト
flag = true;
break;
}
} else {
//その名前の画像が無かったら
flag = true;
this._CBR_complete = true;
break;
}
p_data[i] = {
w: temp.width,
h: temp.height,
};
}
}
if (!flag) {
//全ロードが終わってたら
this.contents.clear();
//ピクチャの表示
var ary = CBR_eroStatus[page].p;
for (var i = 0, len = ary.length; i < len; i++) {
var name = ary[i].name;
if (!name || !ary[i].show) {
continue;
}
//変数とか文字化
name = name.replace(
/\\(\\)|\\([VNP])\[(\d+)\]|\\(<)(.+)\\>/g,
function (a, b, c, d, e, f) {
if (b) {
//\\
return "\\";
} else if (c) {
//[VNP]
d = Number(d);
switch (c) {
case "V":
return $gameVariables.value(d);
break;
case "N":
return $gameActors._data[d]._name;
break;
case "P":
return $dataActors[$gameParty._actors[d - 1]].name;
break;
}
} else {
//script
return eval(f);
}
}
);
if (name) {
this.changePaintOpacity(ary[i].opacity);
var x = ary[i].x;
var y = ary[i].y;
if (ary[i].origin == "center") {
x -= (p_data[i].w * ary[i].zoom) / 2;
y -= (p_data[i].h * ary[i].zoom) / 2;
}
this.drawPicture("pictures", name, 0, 0, x, y, 0, 0, ary[i].zoom, 0);
}
}
//テキストの表示
this.resetTextColor();
var ary = CBR_eroStatus[page].t;
for (var i = 0, len = ary.length; i < len; i++) {
var size = ary[i].size; // ary[i].fontSize;
var temp = ary[i].subject;
if (!temp || !ary[i].show) {
continue;
}
var opAry = temp.match(/(\\\{|\\\}|\\[CI]\[\d+\])+/g);
//先頭にある場合は"","tesa"になる
var strAry = temp.split(/(?:\\\{|\\\}|\\[CI]\[\d+\])+/);
var str = "";
var allW = 0;
var maxSize = null;
var dataFAry = [];
var dataWAry = [];
var drawI = [];
var drawC = [];
//分割した配列の数
for (var k = 0, len2 = strAry.length; k < len2; k++) {
//前方にある\{のフォントサイズを入れる
dataFAry[k] = k ? dataFAry[k - 1] : 0;
drawI[k] = [];
//変数とか文字化
strAry[k] = strAry[k].replace(
/\\(\\)|\\([VNP])\[(\d+)\]|\\(G)|\\(<)(.+)\\>/g,
function (a, b, c, d, e, f, g) {
if (b) {
//\\
return "\\";
} else if (c) {
//[VNP]
d = Number(d);
switch (c) {
case "V":
return $gameVariables.value(d);
break;
case "N":
return $gameActors._data[d]._name;
break;
case "P":
return $dataActors[$gameParty._actors[d - 1]].name;
break;
}
} else if (e) {
//G
return $dataSystem.currencyUnit;
} else {
//script
return eval(g);
}
}
);
//自身の前に区切りマッチがあったら
if (0 < k) {
var temp = opAry[k - 1].split("\\"); //\\{\\}を分割する
for (var m = 1, len3 = temp.length; m < len3; m++) {
switch (temp[m].charAt(0)) {
case "{":
dataFAry[k] += 6;
break;
case "}":
dataFAry[k] -= 6;
break;
case "C":
drawC[k] = Number(temp[m].match(/\[(\d+)\]/)[1]); //Cは複数あっても最後のが適応されれば良いわけで
break;
case "I":
drawI[k][drawI[k].length] = Number(
temp[m].match(/\[(\d+)\]/)[1]
);
break;
}
}
}
this.contents.fontSize = size + dataFAry[k];
this.contents.context.font = this.contents._makeFontNameText();
dataWAry[k] = this.contents.context.measureText(strAry[k]).width; //何の為に+4するのか忘れた
allW += dataWAry[k];
if (strAry[k]) {
//先頭に\{や変数がある時の問題 アイコン乃場合もここを通さないと
if (maxSize === null) {
//まだ記録されてなかったら入れよう
maxSize = dataFAry[k];
} else {
maxSize = maxSize < dataFAry[k] ? dataFAry[k] : maxSize;
}
}
}
var x = ary[i].x;
if (ary[i].origin == "center") {
x -= allW / 2;
} else if (ary[i].origin == "right") {
x -= allW;
}
for (var k = 0, len2 = strAry.length; k < len2; k++) {
this.contents.fontSize = size + dataFAry[k];
this.contents.context.font = this.contents._makeFontNameText();
//bottom→下揃え原点の上 top→上揃え原点の下 center→原点
var line = ary[i].y;
var iconLine = ary[i].y;
if (ary[i].align == "top") {
line += (size + dataFAry[k]) / 2;
} else if (ary[i].align == "bottom") {
line -= (size + dataFAry[k]) / 2;
iconLine -= Window_Base._iconWidth;
} else {
iconLine -= Window_Base._iconWidth / 2;
}
if (drawI[k].length) {
for (var m = 0, len3 = drawI[k].length; m < len3; m++) {
this.drawIcon(drawI[k][m], x, iconLine);
x += Window_Base._iconWidth;
}
}
if (drawC[k] || drawC[k] === 0) {
this.changeTextColor(this.textColor(drawC[k]));
}
this.contents.drawText(strAry[k], x, line, dataWAry[k], 0, "left");
x += dataWAry[k];
}
this.contents.fontSize = this.standardFontSize();
}
this.resetTextColor();
this.changePaintOpacity(true);
this.activate();
this._CBR_complete = true;
}
}
};
Window_EroStatus.prototype.drawPicture = function (
dir,
filename,
sx,
sy,
x,
y,
w,
h,
zoom,
hue
) {
var bitmap = ImageManager.loadBitmap("img/" + dir + "/", filename, hue, true);
this.contents.blt(
bitmap,
sx,
sy,
bitmap.width,
bitmap.height,
x,
y,
bitmap.width * zoom,
bitmap.height * zoom
);
};
Window_EroStatus.prototype.standardPadding = function () {
return 0;
};
Window_Status.prototype.lineColor = function () {
return this.normalColor();
};
Window_Status.prototype.maxEquipmentLines = function () {
return 6;
};
//######### コマンドの追加 ##########
Scene_Menu.prototype.commandEroSta = function () {
SceneManager.push(Scene_EroStatus);
};
setTimeout(function () {
var _Scene_Menu_createCommandWindow =
Scene_Menu.prototype.createCommandWindow;
Scene_Menu.prototype.createCommandWindow = function () {
_Scene_Menu_createCommandWindow.call(this);
this._commandWindow.setHandler("eroStatus", this.commandEroSta.bind(this));
};
}, 0);
_Window_MenuCommand_addOriginalCommands =
Window_MenuCommand.prototype.addOriginalCommands;
Window_MenuCommand.prototype.addOriginalCommands = function () {
_Window_MenuCommand_addOriginalCommands.call(this);
this.addCommand(CBR_eroStatusState.name, "eroStatus", true);
};

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,329 @@
/*:
* @plugindesc Fixes an issue with large sprites appearing under passability tiles.
* @author Neon Black - Version 1.0
*
* @help Large Sprite Fix v1.0
*
* V1.0 - 8.11.2015
*
* This plugin was created to fix an issue similar to the fix applied in Ace
* where large sprites would display under passability tiles when they should
* appear above them. This plugin is for the most part non-intrusive but does
* require a little bit of input from the user.
*
* By default, only the player is affected by this plugin. To apply this fix to
* an event, add the tag <large sprite> to a comment box in the page of the
* event you would like to appear above tiles properly.
*
* This work by Neon Black is licensed under a Creative Commons Attribution 4.0
* International License. To view a copy of this license, visit
* http://creativecommons.org/licenses/by/4.0/. Permissions beyond the scope of
* this license may be available at neonblack.moe/terms.
*
* @param Terrain ID
* @desc This is the ID of the terrain to fix with tiles. Terrain ID is set in the database.
* @default 7
*
* @param Large Followers
* @desc Enable this option to perform large sprite checking on followers. Disabled by default.
* @default No
*
* @param Large Vehicles
* @desc Enable this option to perform large sprite checking on vehicles. Enabled by default.
* @default Yes
*/
/*:ja
* @plugindesc すり抜け可能タイル(タイル)の下側に
* 大きなスプライトが出現する際の問題点を解決します
* @author Neon Black - Version 1.0
*
* @help Large Sprite Fix v1.0
*
* V1.0 - 8.11.2015
*
* このプラグインはすり抜け可能タイル(タイル)の上に表示されるべき
* スプライトが背面に表示されてしまうバグの修正を行います
* ほとんどが自動的な修正となりますが多少のカスタムが必要となります
*
* デフォルト状態ではこのプラグインが有効になるのはプレイヤーに対してだけです
* イベントに対してもこのプラグインを有効にしたい場合は
* 対象のイベントのコメントボックス内に<large sprite>タグを挿入してください
* これによってタイルの上にイベントを表示することができます
*
* ライセンスポリシー
* This work by Neon Black is licensed under a Creative Commons Attribution 4.0
* International License. To view a copy of this license, visit
* http://creativecommons.org/licenses/by/4.0/. Permissions beyond the scope of
* this license may be available at neonblack.moe/terms.
*
* @param Terrain ID
* @desc タイルによって固定される地形IDです
* @default 7
*
* @param Large Followers
* @desc YESにすることでフォロワーキャラクターにも適用されます
* デフォルトではOFFになっています
* @default No
*
* @param Large Vehicles
* @desc YESにすることで乗り物にも適用されます
* デフォルトではONになっています
* @default Yes
*/
//------
// The following lines are the actual core code of the plugin. While you are
// certainly invited to look, modifying it may result in undesirable results.
// Modify at your own risk!
//------
//------
// Imported and namespace
//------
var Imported = Imported || {};
Imported.CP_LargeSpriteFix = 1.0;
var cpp = cpp || {};
cpp.yyt = ["yes", "y", "true"];
cpp.lsdf = cpp.lsdf || {};
cpp.lsdf.params = PluginManager.parameters("CP_Large_Sprite_Fix");
cpp.lsdf.terrain = cpp.lsdf.params["Terrain ID"];
cpp.lsdf.followers =
cpp.yyt.indexOf(cpp.lsdf.params["Large Followers"].toLowerCase()) >= 0;
cpp.lsdf.vehicles =
cpp.yyt.indexOf(cpp.lsdf.params["Large Vehicles"].toLowerCase()) >= 0;
//------
// Alias functions
//------
var aliasUpdateBitmap081115a = Sprite_Character.prototype.updateBitmap;
var aliasUpdatePosition081115a = Sprite_Character.prototype.updatePosition;
var aliasSetupPage081115a = Game_Event.prototype.setupPage;
//------
// Destructive functions list
/*
*/
//------
// Sprite_Character
//------
Sprite_Character.prototype.setUpperAreaSprite = false;
Sprite_Character.prototype.forceGfxChange = false;
Sprite_Character.prototype.oldBitmap = null;
Sprite_Character.prototype.upperAreaSprite = null;
// Checks if the sprite has been changed.
Sprite_Character.prototype.updateBitmap = function () {
if (this.isImageChanged() && this.setUpperAreaSprite)
this.forceGfxChange = true;
else this.forceGfxChange = false;
aliasUpdateBitmap081115a.apply(this, arguments);
};
Sprite_Character.prototype.updatePosition = function () {
aliasUpdatePosition081115a.apply(this, arguments);
if (this.spriteIsOnscreen()) this.checkEncompassedArea();
};
// 5 would be highest priority level for characters
Sprite_Character.prototype.spriteIsOnscreen = function () {
if (this._character.largeSprite() && this._character.screenZ() < 5) {
var rectArray = this.getEdgeRect();
if (
rectArray[0] < Graphics._width &&
rectArray[1] < Graphics._height &&
rectArray[2] > 0 &&
rectArray[3] > 0
)
return true;
}
return false;
};
Sprite_Character.prototype.getEdgeRect = function () {
var x = this.x - Math.round(this._frame.width * this.anchor.x);
var y = this.y - Math.round(this._frame.height * this.anchor.y);
var w = x + this._frame.width;
var h = y + this._frame.height;
return [x, y, w, h];
};
Sprite_Character.prototype.checkEncompassedArea = function () {
var tw = $gameMap.tileWidth();
var th = $gameMap.tileHeight();
if (this.setUpperAreaSprite && this.forceGfxChange)
this.oldBitmap = this.bitmap;
this.setUpperAreaSprite = false;
var boxArray = this.getEdgeRect();
var lastX = null;
var lastY = null;
var copyR = 0;
var mapXD = $gameMap.displayX() * $gameMap.tileWidth();
var mapYD = $gameMap.displayY() * $gameMap.tileHeight();
var totalH = this._frame.height + this._character.jumpHeight();
var _bx = [false, 0, 0, 0];
for (var x = 0; x < this._frame.width; x++) {
var xp = Math.round(mapXD) + boxArray[0] + x;
if (Math.floor(xp / tw) != lastX) {
lastX = Math.floor(xp / tw);
lastY = null;
copyR = 0;
for (var y = 0; y < totalH; y++) {
var yp =
Math.round(mapYD) + boxArray[3] + this._character.jumpHeight() - y;
while (Math.floor(yp / th) == lastY) {
y++;
yp--;
}
lastY = Math.floor(yp / th);
if (
lastY ==
Math.round(
(this._character.screenY + this._character.jumpHeight() + mapYD) /
th
)
) {
if ($gameMap.terrainTag(lastX, lastY) == Number(cpp.lsdf.terrain))
break;
continue;
}
if ($gameMap.terrainTag(lastX, lastY) != Number(cpp.lsdf.terrain))
continue;
var copyR = Math.min(this._frame.height, Math.round(totalH - y + 1));
this.setUpperSprite();
break;
}
}
_bx = this.upperSpriteCopy(x, copyR, _bx);
}
_bx = this.upperSpriteCopy(x, 0, _bx);
if (!this.setUpperAreaSprite && this.upperAreaSprite) {
this.parent.removeChild(this.upperAreaSprite);
this.upperAreaSprite = null;
this.cpResetBitmapFrame();
}
};
Sprite_Character.prototype.upperSpriteCopy = function (x, copyR, _bx) {
if (_bx[3] == copyR) {
_bx[2]++;
return _bx;
}
if (
_bx[0] &&
this.upperAreaSprite &&
_bx[3] > 0 &&
_bx[3] < this._frame.height
) {
var rect = new Rectangle();
rect.x = this._frame.x + _bx[1];
rect.y = this._frame.y;
rect.width = _bx[2];
rect.height = _bx[3];
this.upperAreaSprite.bitmap.blt(
this.bitmap,
rect.x,
rect.y,
rect.width,
rect.height,
_bx[1],
0,
rect.width,
rect.height
);
this.bitmap.clearRect(rect.x, rect.y, rect.width, rect.height);
}
return [true, x, 1, copyR];
};
Sprite_Character.prototype.setUpperSprite = function () {
if (this.setUpperAreaSprite) {
return;
}
if (this.upperAreaSprite) {
this.upperAreaSprite.visible = true;
} else {
this.upperAreaSprite = new Sprite();
this.parent.addChild(this.upperAreaSprite);
this.oldBitmap = this.bitmap;
}
this.upperAreaSprite.bitmap = new Bitmap(
this._frame.width,
this._frame.height
);
this.upperAreaSprite.x = this.x;
this.upperAreaSprite.y = this.y;
this.upperAreaSprite.anchor.x = this.anchor.x;
this.upperAreaSprite.anchor.y = this.anchor.y;
this.upperAreaSprite.opacity = this.opacity;
this.upperAreaSprite.visible = this.visible;
this.upperAreaSprite.z = 8;
this.setUpperAreaSprite = true;
var _oldFrame = new Rectangle();
_oldFrame.x = this._frame.x;
_oldFrame.y = this._frame.y;
_oldFrame.width = this._frame.width;
_oldFrame.height = this._frame.height;
this.bitmap = new Bitmap(this.oldBitmap.width, this.oldBitmap.height);
this.bitmap.blt(
this.oldBitmap,
0,
0,
this.oldBitmap.width,
this.oldBitmap.height,
0,
0,
this.bitmap.width,
this.bitmap.height
);
this.setFrame(_oldFrame.x, _oldFrame.y, _oldFrame.width, _oldFrame.height);
};
Sprite_Character.prototype.cpResetBitmapFrame = function () {
var _oldFrame = new Rectangle();
_oldFrame.x = this._frame.x;
_oldFrame.y = this._frame.y;
_oldFrame.width = this._frame.width;
_oldFrame.height = this._frame.height;
this.bitmap = this.oldBitmap;
this.setFrame(_oldFrame.x, _oldFrame.y, _oldFrame.width, _oldFrame.height);
};
//------
// Game_CharacterBase
//------
Game_CharacterBase.prototype.largeSprite = function () {
return false;
};
Game_Player.prototype.largeSprite = function () {
return true;
};
Game_Follower.prototype.largeSprite = function () {
return cpp.lsdf.followers;
};
Game_Vehicle.prototype.largeSprite = function () {
return cpp.lsdf.vehicles;
};
Game_Event.prototype.largeSprite = function () {
return this._largeSprite;
};
Game_Event.prototype.setupPage = function () {
aliasSetupPage081115a.apply(this, arguments);
this._largeSprite = false;
if (this._pageIndex >= 0) {
for (var i = 0; i < this.list().length; i++) {
if ([108, 408].indexOf(this.list()[i]["code"]) >= 0) {
var note = this.list()[i]["parameters"][0];
if (note.match(/<large sprite>/i)) this._largeSprite = true;
}
}
}
};
//------
// End of plugin
//------

View file

@ -0,0 +1,88 @@
/*:
* @plugindesc Allows tiles to use the "Passage (4 dir)" setting in the tilesets tab of the database.
* @author Neon Black - Version 1.0
*
* @help Passability Fix v1.0
*
* V1.0 - 8.13.2015
*
* This plugin allows the user to define passage settings on passability
* tiles, similar to how normal O passability is defined. This plugin works on
* its own without any need for settings. It overwrites a single function but
* should not interfere with any other plugins. Nonetheless it should be placed
* high in the plugin list.
*
* This work by Neon Black is licensed under a Creative Commons Attribution 4.0
* International License. To view a copy of this license, visit
* http://creativecommons.org/licenses/by/4.0/. Permissions beyond the scope of
* this license may be available at neonblack.moe/terms.
*/
/*:ja
* @plugindesc タイルに対して4方向の通行指定が可能になります
* @author Neon Black - Version 1.0
*
* @help Passability Fix v1.0
*
* V1.0 - 8.13.2015
*
* このプラグインはタイルに対しても
* タイル同様の4方向の通行指定ができるようになるプラグインです
* このプラグインは設定不要で独立して動作します
* 1つのファンクションを上書きしますが他のプラグインには干渉しません
* プラグインリストの中では上位に置いておく必要があります
*
* ライセンスポリシー
* This work by Neon Black is licensed under a Creative Commons Attribution 4.0
* International License. To view a copy of this license, visit
* http://creativecommons.org/licenses/by/4.0/. Permissions beyond the scope of
* this license may be available at neonblack.moe/terms.
*/
//------
// The following lines are the actual core code of the plugin. While you are
// certainly invited to look, modifying it may result in undesirable results.
// Modify at your own risk!
//------
//------
// Imported and namespace
//------
var Imported = Imported || {};
Imported.CP_StarPassabilityFix = 1.0;
//------
// Alias functions
//------
//------
// Destructive functions list
/*
Game_Map.prototype.checkPassage()
*/
// The only modified function....
Game_Map.prototype.checkPassage = function (x, y, bit) {
var flags = this.tilesetFlags();
var tiles = this.allTiles(x, y);
for (var i = 0; i < tiles.length; i++) {
var flag = flags[tiles[i]];
if ((flag & 0x10) !== 0) {
// [*] No effect on passage
if ((flag & bit) === 0) continue;
if ((flag & bit) === bit) return false;
} else {
if ((flag & bit) === 0)
// [o] Passable
return true;
if ((flag & bit) === bit)
// [x] Impassable
return false;
}
}
return false;
};
//------
// End of plugin
//------

View file

@ -0,0 +1,128 @@
/*:
* @plugindesc メダルや貝殻など特定のアイテムをお金の代わりに使えるショップを作成することができます
*
* @author シトラス
*
* @param tradeShopSwitchId
* @text 交換ショップスイッチID
* @desc このスイッチがONの時にショップを起動すると
* 交換ショップになります
* @default 1
*
* @param tradeItemId
* @text 交換アイテムID
* @desc この番号のIDを持つアイテムを交換に使用します
* @default 1
*
* @param tradeItemTanni
* @text 交換アイテム単位
* @desc アイテムの単位枚などアイテムをどう数えるかです
* @default
*
* @help
* 注意点
* 交換ショップのスイッチはイベントが終わった後に自分でOFFしてください
*
*/
var hoge = PluginManager.parameters("CTRS_TradeShop");
//このスイッチがONになっていれば、交換ショップとして扱う
var tradeShopSwitchId = Number(hoge.tradeShopSwitchId);
//交換に使うアイテムのID
var tradeItemId = Number(hoge.tradeItemId);
//交換に使うアイテムの単位
var tradeItemTanni = hoge.tradeItemTanni;
Scene_Shop.prototype.prepare = function (goods, purchaseOnly) {
this._goods = goods;
if ($gameSwitches.value(tradeShopSwitchId)) {
this._purchaseOnly = true;
} else {
this._purchaseOnly = purchaseOnly;
}
this._item = null;
};
//購入を実行
Scene_Shop.prototype.doBuy = function (number) {
if ($gameSwitches.value(tradeShopSwitchId)) {
$gameParty.gainItem(
$dataItems[tradeItemId],
-1 * number * this.buyingPrice()
);
} else {
$gameParty.loseGold(number * this.buyingPrice());
}
$gameParty.gainItem(this._item, number);
};
//-----------------------------------------------------------------------------
// Window_Gold
//
// The window for displaying the party's gold.
// ゴールドの表示ウィンドウを司るスクリプト
function Window_Gold() {
this.initialize.apply(this, arguments);
}
Window_Gold.prototype = Object.create(Window_Base.prototype);
Window_Gold.prototype.constructor = Window_Gold;
Window_Gold.prototype.initialize = function (x, y) {
var width = this.windowWidth();
var height = this.windowHeight();
Window_Base.prototype.initialize.call(this, x, y, width, height);
this.refresh();
};
Window_Gold.prototype.windowWidth = function () {
return 240;
};
Window_Gold.prototype.windowHeight = function () {
return this.fittingHeight(1);
};
Window_Gold.prototype.refresh = function () {
var x = this.textPadding();
var width = this.contents.width - this.textPadding() * 2;
this.contents.clear();
if ($gameSwitches.value(tradeShopSwitchId)) {
this.drawCurrencyValue(this.value(), tradeItemTanni, x, 0, width);
} else {
this.drawCurrencyValue(this.value(), this.currencyUnit(), x, 0, width);
}
};
Window_Gold.prototype.value = function () {
if ($gameSwitches.value(tradeShopSwitchId)) {
return $gameParty.numItems($dataItems[tradeItemId]);
} else {
return $gameParty.gold();
}
};
Window_Gold.prototype.currencyUnit = function () {
return TextManager.currencyUnit;
};
Window_Gold.prototype.open = function () {
this.refresh();
Window_Base.prototype.open.call(this);
};
Window_ShopNumber.prototype.drawTotalPrice = function () {
var total = this._price * this._number;
var width = this.contentsWidth() - this.textPadding();
if ($gameSwitches.value(tradeShopSwitchId)) {
this.drawCurrencyValue(total, tradeItemTanni, 0, this.priceY(), width);
} else {
this.drawCurrencyValue(total, this._currencyUnit, 0, this.priceY(), width);
}
};

View file

@ -0,0 +1,128 @@
/*:
* @plugindesc メダルや貝殻など特定のアイテムをお金の代わりに使えるショップを作成することができます
*
* @author シトラス
*
* @param tradeShopSwitchId
* @text 交換ショップスイッチID
* @desc このスイッチがONの時にショップを起動すると
* 交換ショップになります
* @default 1
*
* @param tradeItemId
* @text 交換アイテムID
* @desc この番号のIDを持つアイテムを交換に使用します
* @default 1
*
* @param tradeItemTanni
* @text 交換アイテム単位
* @desc アイテムの単位枚などアイテムをどう数えるかです
* @default
*
* @help
* 注意点
* 交換ショップのスイッチはイベントが終わった後に自分でOFFしてください
*
*/
var hoge = PluginManager.parameters("CTRS_TradeShop2");
//このスイッチがONになっていれば、交換ショップとして扱う
var tradeShopSwitchId = Number(hoge.tradeShopSwitchId);
//交換に使うアイテムのID
var tradeItemId = Number(hoge.tradeItemId);
//交換に使うアイテムの単位
var tradeItemTanni = hoge.tradeItemTanni;
Scene_Shop.prototype.prepare = function (goods, purchaseOnly) {
this._goods = goods;
if ($gameSwitches.value(tradeShopSwitchId)) {
this._purchaseOnly = true;
} else {
this._purchaseOnly = purchaseOnly;
}
this._item = null;
};
//購入を実行
Scene_Shop.prototype.doBuy = function (number) {
if ($gameSwitches.value(tradeShopSwitchId)) {
$gameParty.gainItem(
$dataItems[tradeItemId],
-1 * number * this.buyingPrice()
);
} else {
$gameParty.loseGold(number * this.buyingPrice());
}
$gameParty.gainItem(this._item, number);
};
//-----------------------------------------------------------------------------
// Window_Gold
//
// The window for displaying the party's gold.
// ゴールドの表示ウィンドウを司るスクリプト
function Window_Gold() {
this.initialize.apply(this, arguments);
}
Window_Gold.prototype = Object.create(Window_Base.prototype);
Window_Gold.prototype.constructor = Window_Gold;
Window_Gold.prototype.initialize = function (x, y) {
var width = this.windowWidth();
var height = this.windowHeight();
Window_Base.prototype.initialize.call(this, x, y, width, height);
this.refresh();
};
Window_Gold.prototype.windowWidth = function () {
return 240;
};
Window_Gold.prototype.windowHeight = function () {
return this.fittingHeight(1);
};
Window_Gold.prototype.refresh = function () {
var x = this.textPadding();
var width = this.contents.width - this.textPadding() * 2;
this.contents.clear();
if ($gameSwitches.value(tradeShopSwitchId)) {
this.drawCurrencyValue(this.value(), tradeItemTanni, x, 0, width);
} else {
this.drawCurrencyValue(this.value(), this.currencyUnit(), x, 0, width);
}
};
Window_Gold.prototype.value = function () {
if ($gameSwitches.value(tradeShopSwitchId)) {
return $gameParty.numItems($dataItems[tradeItemId]);
} else {
return $gameParty.gold();
}
};
Window_Gold.prototype.currencyUnit = function () {
return TextManager.currencyUnit;
};
Window_Gold.prototype.open = function () {
this.refresh();
Window_Base.prototype.open.call(this);
};
Window_ShopNumber.prototype.drawTotalPrice = function () {
var total = this._price * this._number;
var width = this.contentsWidth() - this.textPadding();
if ($gameSwitches.value(tradeShopSwitchId)) {
this.drawCurrencyValue(total, tradeItemTanni, 0, this.priceY(), width);
} else {
this.drawCurrencyValue(total, this._currencyUnit, 0, this.priceY(), width);
}
};

View file

@ -0,0 +1,99 @@
//=============================================================================
// Change Tile Size
// by Shaz
// Last Update: 2015.10.21
//=============================================================================
/*:
* @plugindesc Allows maps based on a grid size other than 48x48
* @author Shaz
*
* @param Tile Size
* @desc Size of tiles (pixels)
* @default 48
*
* @param Tileset Image Folder
* @desc Folder where the in-game tilesets are kept
* @default img/tilesets/
*
* @param Parallax Image Folder
* @desc Folder where the in-game parallaxes are kept
* @default img/parallaxes/
*
* @help This plugin does not provide plugin commands.
*
* To use the map editor with tiles of a size other than 48x48 in your project,
* have two folders for tileset images. The folder named in the plugin
* parameters is for original, high-quality, final-sized tiles. The
* original folder, img/tilesets/ can contain a duplicate copy of each
* tileset, shrunk or enlarged to 48x48 pixels per tile. Quality in the
* editor may be poorer, but the original tiles will be used in the game.
* The img/tilesets folder can be cleared prior to distribution.
*
* The same applies to the img/parallaxes folder if using a parallax map
* with a grid size other than 48x48.
*
*/
/*:ja
* @plugindesc 48x48以外のグリッドサイズのマップを使用可能にします
* @author Shaz
*
* @param Tile Size
* @desc タイルのサイズの指定です(ピクセル)
* @default 48
*
* @param Tileset Image Folder
* @desc タイルセットが保管されているフォルダーです
* @default img/tilesets/
*
* @param Parallax Image Folder
* @desc パララックスイメージが保管されているフォルダーです
* @default img/parallaxes/
*
* @help このプラグインはプラグインコマンドを含みません
*
* 48x48サイズ以外のタイルを使用したい場合
* タイルセット用に2つのフォルダーを作成してください
* パラメーターによって指定されたフォルダーは最終版サイズの
* オリジナル画像の保管用ファイルとしてください
* img/tilesets/のオリジナルフォルダーにはそれぞれのタイルセットから
* 48x48のサイズに縮小拡大された複製が保管されます
* エディタ上では荒く見えるかもしれませんが
* ゲーム内ではオリジナルのタイルが使われますので大丈夫です
* img/tilesetsは配布前に削除することができます
*
* 48x48グリッドサイズ以外でパララックスマップを利用する場合にも
* 同様の操作をimg/parallaxesに行ってください
*/
(function () {
var parameters = PluginManager.parameters("ChangeTileSize");
var tileSize = parseInt(parameters["Tile Size"] || 48);
var tilesetsFolder = String(
parameters["Tileset Image Folder"] || "img/tilesets/"
);
var parallaxesFolder = String(
parameters["Parallax Image Folder"] || "img/parallaxes/"
);
ImageManager.loadTileset = function (filename, hue) {
return this.loadBitmap(tilesetsFolder, filename, hue, false);
};
ImageManager.loadParallax = function (filename, hue) {
return this.loadBitmap(parallaxesFolder, filename, hue, true);
};
Game_Map.prototype.tileWidth = function () {
return tileSize;
};
Game_Map.prototype.tileHeight = function () {
return tileSize;
};
Game_Vehicle.prototype.maxAltitude = function () {
return tileSize;
};
})();

View file

@ -0,0 +1,40 @@
//============================================================================
// CheckTroopid.js
//============================================================================
/*:ja
* @plugindesc ver1.00 戦闘開始時に敵グループIDを取得します
* @author まっつUP
*
* @param troopid
* @desc 敵グループIDを代入する変数
* @type variable
* @default 10
*
* @help
*
* RPGで笑顔を
*
* このヘルプとパラメータの説明をよくお読みになってからお使いください
*
* 各戦闘開始時に
* 任意の変数に敵グループIDを代入します
*
* 利用規約(2019/10/11変更)
* この作品は マテリアルコモンズブルーライセンスの下に提供されています
* https://materialcommons.tk/mtcm-b-summary/
* クレジット表示まっつUP
*
*/
(function () {
var parameters = PluginManager.parameters("CheckTroopid");
var CTtroopid = Number(parameters["troopid"] || 0);
//マップのリフレッシュをしない方法で代入している。
var _BattleManager_setup = BattleManager.setup;
BattleManager.setup = function (troopId, canEscape, canLose) {
if (CTtroopid > 0) $gameVariables._data[CTtroopid] = troopId;
_BattleManager_setup.call(this, troopId, canEscape, canLose);
};
})();

View file

@ -0,0 +1,265 @@
//=============================================================================
// Libellule Text extractor to clipboard plugin
// Clipboard_llule.js
//=============================================================================
/*
* Install and configure with the patcher here :
* https://www.dropbox.com/sh/p83yxde8e8nrz35/AADkJzbz7VuM7HqwiwhhfhHTa?dl=0
* Help : http://www.ulmf.org/bbs/showthread.php?t=29359
*/
//=============================================================================
TimerMil = 200;
WantCmdItemSeparator = true;
CmdItemSeparator = "。";
ShowCodeColor = false;
ForceNameSeparator = false;
TextSeparatorLeft = String.fromCharCode(12300);
TextSeparatorRight = String.fromCharCode(12301);
NameCodeColor = ["#ffffa0", "#40c0f0", "#ff80ff", "#80ff80", "#66cc40"];
IgnoreRepeatableItem = true;
BloctextSeparator = true;
IgnoreRepeatablebloc = true;
var IgnoreRegExtextbloc = [
/^\d\d:\d\d($|.$|。$)/,
/(^([,.\d]+)([,.]\d+)?)(\uFF27($|。$)|G($|。$)|$|。$)/,
/^(\uFF27($|。$)|G($|。$))/,
];
ClipLogerOnStart = true;
WantChoiceSeparator = true;
ChoiceSeparator = "。\r\n";
TextWaitingTimeOFF = true;
var ClipLoger = "";
LastItem = "";
ColorEnCour = "";
ActualThis = "";
StarTextNamefound = false;
EndTextNamefound = false;
BlocSeparatorLeft = String.fromCharCode(12300);
BlocSeparatorRight = String.fromCharCode(12301);
LastColor = "";
MemText = "";
LastMemTextSend = "";
ClipTimerOn = false;
SaveOrgDrawText = Bitmap.prototype.drawText;
var gui = require("nw.gui");
var clipboard = gui.Clipboard.get();
var win = gui.Window.get();
var SaveoldInput_onKeyDown = Input._onKeyDown;
var Savewindowonload = window.onload;
var choices_encour = [];
Bitmap.prototype.drawText = function (text, x, y, maxWidth, lineHeight, align) {
OptionalText = "";
pass = true;
if (text) {
if (text.length == 1 && y >= this.height) {
pass = false;
}
if (IgnoreRepeatableItem && text.length > 1) {
if (text == LastItem) {
pass = false;
}
LastItem = text;
}
if (pass) {
if (ShowCodeColor) {
if (this.textColor != LastColor) {
OptionalText = "<" + this.textColor + ">";
LastColor = this.textColor;
}
}
if (ForceNameSeparator && text.length == 1) {
if (!ClipTimerOn && NameCodeColor.indexOf(this.textColor) > -1) {
LastColor = this.textColor;
StarTextNamefound = true;
ColorNameEnCour = this.textColor;
}
if (
ClipTimerOn &&
StarTextNamefound &&
this.textColor != ColorNameEnCour
) {
OptionalText = OptionalText + TextSeparatorLeft;
StarTextNamefound = false;
EndTextNamefound = true;
}
}
if (BloctextSeparator) {
if (ActualThis == "") {
ActualThis = this;
OptionalText = OptionalText + BlocSeparatorLeft;
} else {
if (ActualThis != this) {
OptionalText =
OptionalText + BlocSeparatorRight + "\r\n" + BlocSeparatorLeft;
ActualThis = this;
}
}
if ($gameMessage != null) {
if ($gameMessage.isChoice() && !choices_encour.length) {
choices_encour = $gameMessage._choices;
}
}
}
if (ClipTimerOn) {
if (text.length > 1 && WantCmdItemSeparator) {
MemText = MemText + OptionalText + text + CmdItemSeparator;
} else {
MemText = MemText + OptionalText + text;
}
} else {
if (text.length > 1 && WantCmdItemSeparator) {
MemText = OptionalText + text + CmdItemSeparator;
} else {
MemText = OptionalText + text;
}
ClipTimerOn = true;
ClipTimer = setTimeout(ClipTimerSend, TimerMil);
}
}
}
SaveOrgDrawText.call(this, text, x, y, maxWidth, lineHeight, align);
};
function ClipTimerSend() {
if (BloctextSeparator) {
MemText = MemText + BlocSeparatorRight;
KickOutDuplicateBloc();
}
if (EndTextNamefound) {
MemText = MemText + TextSeparatorRight;
StarTextNamefound = false;
EndTextNamefound = false;
if (BloctextSeparator) {
KickOutDuplicateBloc();
}
}
if (MemText != "") {
clipboard.set(MemText, "text");
LastMemTextSend = MemText;
}
ClipTimerOn = false;
ActualThis = "";
LastColor = "";
ColorNameEnCour = "";
}
var LibWindow_Message_prototype_clearFlags =
Window_Message.prototype.clearFlags;
Window_Message.prototype.clearFlags = function () {
LibWindow_Message_prototype_clearFlags.call(this);
this._showFast = true;
this._lineShowFast = true;
this._pauseSkip = false;
};
function LaunchCliploger() {
Path = process.cwd() + "\\www\\js\\plugins";
var execFile = require("child_process").execFile;
ClipLoger = execFile(
Path + "\\ClipLoger.exe",
function (error, stdout, stderr) {
ClipLoger = "";
}
);
if (!ClipLoger.pid) {
alert(Msg1);
return;
}
setTimeout(Focus, 500);
}
function Focus() {
if (ClipLoger.pid) {
win.focus();
} else {
setTimeout(Focus, 500);
}
}
Input._onKeyDown = function (event) {
if (event.keyCode == 118) {
clipboard.set(LastMemTextSend, "text");
}
if (event.keyCode == 117) {
if (ClipLoger.pid) {
ClipLoger.kill();
} else {
LaunchCliploger();
}
}
if (event.keyCode == 116) {
if (ClipLoger.pid) {
ClipLoger.kill();
}
}
SaveoldInput_onKeyDown.call(this, event);
};
window.onload = function () {
if (ClipLogerOnStart) {
LaunchCliploger();
}
Savewindowonload.call(this);
};
function KickOutDuplicateBloc() {
var Bloc = MemText.split("\r\n");
var output = [];
var Deleteone = "";
if (choices_encour.length && WantChoiceSeparator) {
var temps = choices_encour[0].replace(/\\C\[\d+\]/gi, "");
var With = BlocSeparatorLeft + temps;
var Deleteone = With;
for (i = 1; i < choices_encour.length; i++) {
temps = choices_encour[i].replace(/\\C\[\d+\]/gi, "");
With = With + ChoiceSeparator + temps;
Deleteone = Deleteone + temps;
}
With += BlocSeparatorRight;
output.push(With);
Deleteone += BlocSeparatorRight;
choices_encour = [];
}
for (var i = 0; i < Bloc.length; i++) {
if (output.indexOf(Bloc[i]) < 0) {
if (RegEXspeIgnore(Bloc[i]) && Deleteone != Bloc[i]) {
output.push(EraseDoubleSeparator(Bloc[i]));
}
}
}
MemText = output.join("\r\n");
}
function RegEXspeIgnore(Bloc) {
BlocS = Bloc.slice(1, Bloc.length - 1);
if (IgnoreRegExtextbloc.length != 0) {
for (var i = 0; i < IgnoreRegExtextbloc.length; i++) {
if (BlocS.search(IgnoreRegExtextbloc[i]) != -1) {
return false;
}
}
return true;
} else {
return true;
}
}
function EraseDoubleSeparator(Bloc) {
if (Bloc.split(BlocSeparatorLeft).length == 3) {
if (Bloc.split(BlocSeparatorRight).length == 3) {
return Bloc.slice(1, Bloc.length - 1);
}
}
return Bloc;
}
Msg1 = "ClipLoger.exe not found\r\nReinstal the plugin from the patcher\r\n";
var Save_Window_Message_prototype_updateWait =
Window_Message.prototype.updateWait;
Window_Message.prototype.updateWait = function () {
if (ClipTimerOn && TextWaitingTimeOFF) {
this._waitCount = 0;
}
return Save_Window_Message_prototype_updateWait.call(this);
};

View file

@ -0,0 +1,831 @@
//
// 汎用ポップアップコア ver1.06
//
// ------------------------------------------------------
// Copyright (c) 2016 Yana
// Released under the MIT license
// http://opensource.org/licenses/mit-license.php
// ------------------------------------------------------
//
// author Yana
//
var Imported = Imported || {};
Imported["CommonPopupCore"] = 1.06;
/*:
* @plugindesc ver1.06/汎用的なポップアップの仕組みを提供するためのベースプラグインです
* @author Yana
*
* @param Text Back Color
* @desc ポップアップの背景カラーです
* rgba(red,green,blue,alpha)で設定してください
* @default rgba(0,0,0,0.6)
*
* @param Text Back FileName
* @desc ポップアップの背景画像名です
* %dがインデックスに変換されます
* @default popup_back%d
*
* @help プラグインコマンド
* CommonPopup add param1 param2 param3
*
* 必要なパラメータのみを指定できます
* :プレイヤーの上にテストと240フレームポップアップさせる
* CommonPopup add text:テスト count:240 eventId:-1
*
* パラメータ詳細:
* text:表示テキスト
* eventId:表示するイベントのID
* count:表示時間
* delay:表示遅延
* moveX:目標地点X(相対座標)
* moveY:目標地点Y(相対座標)
* sx:表示位置補正X
* sy:表示位置補正Y
* pattern:表示パターン 0がフェード-1が横ストレッチ-2が縦ストレッチ
* back:-1:透明背景,0:背景カラーで塗りつぶし,1以上:画像インデックス
* bx:内容の表示位置補正X
* by:内容の表示位置補正Y
* extend:表示タイミングの調整用配列で指定
* :extend:[20,50] 20フレーム掛けて出現し50フレーム目から消え始める
* fixed:画面に固定するか true/falseで指定
* anchorX:
* anchorY:
* slideCount:新しいポップアップが発生した際上にスライドさせる速度
*
* イベントコマンドのスクリプトを使う場合
*
* this.addPopup(["add","text:テスト","count:120"]);
*
* のように記述すればスクリプトでポップアップを行うことができます
* 同じようにイベントコマンドの移動ルート内のスクリプトで使用する場合
*
* $gameMap._interpreter.addPopup(["add","text:テスト","count:120"]);
*
* のように記述すれば使用可能です
*
* ------------------------------------------------------
* 利用規約
* ------------------------------------------------------
* 当プラグインはMITライセンスで公開されています
* 使用に制限はありません商用アダルトいずれにも使用できます
* 二次配布も制限はしませんがサポートは行いません
* 著作表示は任意です行わなくても利用できます
* 要するに特に規約はありません
* バグ報告や使用方法等のお問合せはネ実ツクールスレ
* またはTwitterにお願いします
* https://twitter.com/yanatsuki_
* 素材利用は自己責任でお願いします
* ------------------------------------------------------
* このプラグインは汎用的なポップアップの仕組みを提供するプラグインです
* このプラグイン単体ではプラグインコマンドを追加する以外の機能はありません
* 追加機能として
* \I[x]で描画されるアイコンのサイズが文字サイズに追従する
* 文字サイズ変更の制御文字\FS[x]が追加される
* の2点が追加されます
* ------------------------------------------------------
* 更新履歴:
* ver1.06:180513
* 一部の処理が正常に動作していなかったバグを修正
* ver1.05:170525
* ポップアップ発生時にSEを再生する機能を追加
* ver1.04
* YEP_MessageCoreとの競合回避処理を追加
* 動作パターンに縦ストレッチと横ストレッチを追加
* ポップアップ用のプラグインパラメータが正常に動作していなかったバグを修正
* ver1.03:
* backのパラメータにpicturesフォルダのファイル名を指定できるように変更
* ver1.02:
* スライドに上から下に動作するようにする機能を追加
* ver1.01:
* containerが作成されていない状態で
* ポップアップが登録される可能性のあるバグを修正しました
* ver1.00:
* 公開
*/
function Sprite_Popup() {
this.initialize.apply(this, arguments);
}
function CommonPopupManager() {
throw new Error("This is a static class");
}
(function () {
var parameters = PluginManager.parameters("CommonPopupCore");
var commonPopupTextBackColor = String(
parameters["Text Back Color"] || "rgba(0, 0, 0, 0.6)"
);
var commonPopupTextBackFileName = String(
parameters["Text Back FileName"] || "popup_back%d"
);
var _cPU_GInterpreter_pluginCommand =
Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function (command, args) {
_cPU_GInterpreter_pluginCommand.call(this, command, args);
if (command === "CommonPopup" || command === "ポップアップ") {
switch (args[0]) {
case "add":
case "表示":
this.addPopup(args);
break;
case "clear":
case "消去":
CommonPopupManager.clearPopup();
break;
}
}
};
Array.prototype.setNullPos = function (object) {
for (var i = 0; i < this.length; i++) {
if (this[i] === null || this[i] === undefined) {
this[i] = object;
return i;
}
}
this.push(object);
};
Array.prototype.compact = function () {
var result = [];
for (var i = 0; i < this.length; i++) {
if (this[i] !== null && this[i] !== undefined) {
result.push(this[i]);
}
}
return result;
};
CommonPopupManager.initTempSprites = function () {
this._tempCommonSprites = new Array(50);
this._setedPopups = [];
this._readyPopup = [];
};
CommonPopupManager.window = function () {
if (this._window) {
return this._window;
}
this._window = new Window_Base(0, 0, Graphics.boxWidth, Graphics.boxHeight);
return this._window;
};
CommonPopupManager.testBitmap = function () {
if (this._testBitmap) {
return this._testBitmap;
}
this._testBitmap = new Bitmap(1, 1);
return this._testBitmap;
};
Sprite_Popup.prototype = Object.create(Sprite.prototype);
Sprite_Popup.prototype.constructor = Sprite_Popup;
Sprite_Popup.prototype.initialize = function (index) {
Sprite.prototype.initialize.call(this);
this._index = index;
this._count = 0;
this._enable = false;
this.update();
};
Sprite_Popup.prototype.setMembers = function (arg) {
this._count = arg.count;
this._arg = arg;
this.anchor.x = arg.anchorX;
this.anchor.y = arg.anchorY;
this.x = arg.x;
this.y = arg.y;
this.z = 6;
this.visible = true;
this._enable = true;
this.createBitmap();
if (arg.slideCount) {
CommonPopupManager._setedPopups.push([
this._index,
this.height,
this._arg.slideCount,
]);
}
};
Sprite_Popup.prototype.createBitmap = function () {
if (this._arg.bitmap) {
this.bitmap = this._arg.bitmap;
} else {
CommonPopupManager.window().resetFontSettings();
var text = this._arg.text;
var width = CommonPopupManager.window().textWidth(text);
var height = CommonPopupManager.window().contents.fontSize + 8;
var sh = 8;
if (this._arg.back === 0) {
sh = 2;
}
CommonPopupManager.window().createContents();
this.bitmap = new Bitmap(width + 24, height + sh);
this.drawBackRect(width + 24, height + sh);
CommonPopupManager.window().drawTextEx(this._arg.text, 12, 4);
this.bitmap.blt(
CommonPopupManager.window().contents,
0,
0,
width + 24,
height + sh,
this._arg.bx,
this._arg.by + 2
);
}
};
Sprite_Popup.prototype.drawBackRect = function (width, height) {
switch (this._arg.back) {
case 0:
var color1 = commonPopupTextBackColor;
var color2 = "rgba(0,0,0,0)";
var dSize = width / 4;
this.bitmap.gradientFillRect(0, 0, dSize, height, color2, color1);
this.bitmap.fillRect(dSize, 0, dSize * 2, height, color1);
this.bitmap.gradientFillRect(
dSize * 3,
0,
dSize,
height,
color1,
color2
);
break;
case -1:
break;
default:
var bitmap = CommonPopupManager.makeBitmap(this._arg);
var w = this._bitmap.width;
var h = this._bitmap.height;
if (typeof this._arg.back === "string") {
w = bitmap.width > this._bitmap.width ? bitmap.width : w;
h = bitmap.height > this._bitmap.height ? bitmap.height : h;
if (w > this._bitmap.width || h > this._bitmap.height) {
this.bitmap = new Bitmap(w, h);
}
}
this.bitmap.blt(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, w, h);
bitmap.clear();
bitmap = null;
}
};
Sprite_Popup.prototype.update = function () {
Sprite.prototype.update.call(this);
if (CommonPopupManager._tempCommonSprites[this._index] && !this._enable) {
if (CommonPopupManager._tempCommonSprites[this._index].delay === 0) {
this.setMembers(CommonPopupManager._tempCommonSprites[this._index]);
if (this._arg && this._arg.se.name) AudioManager.playSe(this._arg.se);
} else {
CommonPopupManager._tempCommonSprites[this._index].delay--;
}
}
if (this._count > 0) {
this._count--;
if (!this._arg) {
this.terminate();
return;
}
switch (this._arg.pattern) {
case 0:
case "0":
case "Normal":
this.updateSlide();
break;
case -1:
case "-1":
case "Stretch":
this.updateTurn();
break;
case -2:
case "-2":
case "GrowUp":
this.updateGrowUp();
break;
default:
this.updateAnime();
}
if (this._count === 0) this.terminate();
}
if (this._arg && this._arg.slideCount) this.updateMoveSlide();
};
Sprite_Popup.prototype.updateMoveSlide = function () {
if (CommonPopupManager._setedPopups) {
var array = CommonPopupManager._setedPopups.clone().reverse();
var n = 0;
for (var i = 0; i < array.length; i++) {
if (this._index === array[i][0]) {
if (this._arg.slideAction === "Down") {
this.y = this.y + n;
} else {
this.y = this.y - n;
}
}
var sprite = CommonPopupManager._tempCommonSprites[array[i][0]];
if (sprite.pattern === -2 || sprite.pattern === "GrowUp") {
n += array[i][1] * sprite.rate;
} else {
n +=
array[i][1] *
((this._arg.slideCount - array[i][2]) / this._arg.slideCount);
}
}
for (var i = 0; i < CommonPopupManager._setedPopups.length; i++) {
CommonPopupManager._setedPopups[i][2]--;
if (CommonPopupManager._setedPopups[i][2] < 0) {
CommonPopupManager._setedPopups[i][2] = 0;
}
}
array = null;
}
};
Sprite_Popup.prototype.updateSlide = function () {
var originalWait = this._arg.count;
var cnt = originalWait - this._count;
this.opacity = 255;
var act = [originalWait * 0.25, originalWait * 0.75];
if (this._arg.extend !== "") {
act = this._arg.extend;
}
//var oa = Math.max(originalWait - act[1],1);
//var n1 = Math.max(originalWait / oa,0.1);
var opTime1 = act[0];
var moveX = 0;
var moveY = 0;
if (act[2]) {
opTime1 = originalWait - act[2];
}
var opTime2 = originalWait - act[1];
var n = 0;
if (act[3]) {
opTime2 = act[3];
}
// 登場演出
if (cnt < act[0]) {
var up = this._arg.moveY / act[0];
var slide = this._arg.moveX / act[0];
this.opacity = Math.floor(255 * (cnt / opTime1));
moveX = Math.floor(slide * cnt);
moveY = Math.floor(up * cnt);
// 退場演出
} else if (cnt >= act[1]) {
var up = this._arg.moveY / (originalWait - act[1]);
var slide = this._arg.moveX / (originalWait - act[1]);
this.opacity = Math.floor(255 * (this._count / opTime2));
if (this._arg.enableOutEffect) {
moveX = Math.floor(this._arg.moveX * (this._count / opTime2)); //Math.floor((originalWait / n1) * slide);
moveY = Math.floor(this._arg.moveY * (this._count / opTime2)); //Math.floor((originalWait / n1) * up);
} else {
moveX = this._arg.moveX; //Math.floor((originalWait / n1) * slide);
moveY = this._arg.moveY; //Math.floor((originalWait / n1) * up);
}
} else {
moveX = this._arg.moveX; //Math.floor((originalWait / n1) * slide);
moveY = this._arg.moveY; //Math.floor((originalWait / n1) * up);
}
this._times = cnt;
this.setPosition(moveX, moveY);
};
Sprite_Popup.prototype.updateTurn = function () {
var originalWait = this._arg.count;
var cnt = originalWait - this._count;
var act = [originalWait * 0.25, originalWait * 0.75];
if (this._arg.extend) act = this._arg.extend;
if (this._count === 0) this.scale.x = 0;
//var oa = Math.max(originalWait - act[1],1);
//var n1 = Math.max(originalWait / oa,0.1);
//var up = (this._arg.moveY / (originalWait / n1));
//var slide = (this._arg.moveX / (originalWait / n1));
var moveX = 0;
var moveY = 0;
if (cnt < act[0]) {
var up = this._arg.moveY / act[0];
var slide = this._arg.moveX / act[0];
var rate = cnt / act[0];
this.scale.x = rate;
moveX = Math.floor(slide * cnt);
moveY = Math.floor(up * cnt);
} else if (cnt > act[1]) {
var a1 = originalWait - act[1];
var rate = this._count / a1;
this.scale.x = rate;
if (this._arg.enableOutEffect) {
moveX = Math.floor(this._arg.moveX * (this._count / a1)); //Math.floor((originalWait / n1) * slide);
moveY = Math.floor(this._arg.moveY * (this._count / a1)); //Math.floor((originalWait / n1) * up);
} else {
moveX = this._arg.moveX; //Math.floor((originalWait / n1) * up);
moveY = this._arg.moveY; //Math.floor((originalWait / n1) * slide);
}
} else {
this.scale.x = 1.0;
moveX = this._arg.moveX; //Math.floor((originalWait / n1) * up);
moveY = this._arg.moveY; //Math.floor((originalWait / n1) * slide);
}
this._times = cnt;
this.setPosition(moveX, moveY);
};
Sprite_Popup.prototype.updateGrowUp = function () {
var originalWait = this._arg.count;
var cnt = originalWait - this._count;
var act = [originalWait * 0.25, originalWait * 0.75];
if (this._arg.extend) act = this._arg.extend;
if (this._count === 0) this.scale.y = 0;
//var oa = Math.max(originalWait - act[1],1);
//var n1 = Math.max(originalWait / oa,0.1);
//var up = (this._arg.moveY / (originalWait / n1));
//var slide = (this._arg.moveX / (originalWait / n1));
var moveX = 0;
var moveY = 0;
if (cnt < act[0]) {
var up = this._arg.moveY / act[0];
var slide = this._arg.moveX / act[0];
var rate = cnt / act[0];
this.scale.y = rate;
moveX = Math.floor(slide * cnt);
moveY = Math.floor(up * cnt);
this._arg.rate = rate;
} else if (cnt >= act[1]) {
var a1 = originalWait - act[1];
var rate = this._count / a1;
this.scale.y = rate;
this._arg.rate = rate;
if (this._arg.enableOutEffect) {
moveX = Math.floor(this._arg.moveX * (this._count / a1)); //Math.floor((originalWait / n1) * slide);
moveY = Math.floor(this._arg.moveY * (this._count / a1)); //Math.floor((originalWait / n1) * up);
} else {
moveX = this._arg.moveX; //Math.floor((originalWait / n1) * up);
moveY = this._arg.moveY; //Math.floor((originalWait / n1) * slide);
}
} else {
this.scale.y = 1.0;
moveX = this._arg.moveX; //Math.floor((originalWait / n1) * up);
moveY = this._arg.moveY; //Math.floor((originalWait / n1) * slide);
}
this._times = cnt;
this.setPosition(moveX, moveY);
};
Sprite_Popup.prototype.setPosition = function (x, y) {
this.x = this._arg.x + x + this._arg.sx;
this.y = this._arg.y + y + this._arg.sy;
if (this._arg.battler) {
if ($gameParty.inBattle()) {
this.x += this._arg.battler.x;
this.y += this._arg.battler.y;
} else {
this.x += this._arg.battler._realX * $gameMap.tileWidth();
this.y += this._arg.battler._realY * $gameMap.tileHeight();
}
}
var xx = this.x;
var yy = this.y;
if (this._arg.fixed) {
var dx = $gameMap._displayX;
var dy = $gameMap._displayY;
xx = this.x - dx * $gameMap.tileWidth();
yy = this.y - dy * $gameMap.tileHeight();
if (xx < 0 || yy < 0) {
if (xx < 0 && $gameMap.isLoopHorizontal()) dx -= $dataMap.width;
if (yy < 0 && $gameMap.isLoopVertical()) dy -= $dataMap.height;
xx = this.x - dx * $gameMap.tileWidth();
yy = this.y - dy * $gameMap.tileHeight();
}
}
this.x = xx;
this.y = yy;
};
Sprite_Popup.prototype.updateAnime = function () {
var anime = $dataAnimations[Number(this._arg.pattern)];
var frameId = Math.floor(
(anime.frames.length * (this._arg.count - this._count)) / this._arg.count
);
if (frameId !== anime.frames.length) {
var array = anime.frames[frameId][0];
var x = array[1];
var y = array[2];
this.x = this._arg.x + x + this._arg.sx;
this.y = this._arg.y + y + this._arg.sy;
this.scale = new Point(array[3] / 100, array[3] / 100);
this.rotation = array[4];
this.opacity = array[6];
this.blendMode = array[7];
}
};
Sprite_Popup.prototype.terminate = function () {
this.bitmap = null;
this.visible = false;
this._enable = false;
this._count = 0;
this._arg = null;
if (CommonPopupManager._tempCommonSprites[this._index]) {
CommonPopupManager._tempCommonSprites[this._index].terminate = true;
}
if (CommonPopupManager._setedPopups) {
for (var i = 0; i < CommonPopupManager._setedPopups.length; i++) {
if (CommonPopupManager._setedPopups[i][0] === this._index) {
delete CommonPopupManager._setedPopups[i];
}
}
CommonPopupManager._setedPopups =
CommonPopupManager._setedPopups.compact();
}
};
Game_Interpreter.prototype.addPopup = function (argParam) {
var eventId = 0;
for (var i = 0; i < argParam.length; i++) {
if (argParam[i].match(/^eventId:(.+)/g)) {
eventId = Number(RegExp.$1);
break;
}
}
var character = this.character(eventId);
var arg = CommonPopupManager.setPopup(argParam, character);
if (arg.back > 0 || typeof arg.back === "string") {
CommonPopupManager.bltCheck(CommonPopupManager.makeBitmap(arg));
CommonPopupManager._readyPopup.push(arg);
} else {
CommonPopupManager._tempCommonSprites.setNullPos(arg);
}
};
CommonPopupManager.setPopup = function (argParam, character) {
var arg = {
x: null,
y: null,
text: "", // 表示テキスト
eventId: -1, // 表示するイベントのID
count: 60, // 表示時間
delay: 0, // 表示遅延
moveX: 0, // 目標地点X(相対座標)
moveY: -48, // 目標地点Y(相対座標)
sx: 0, // 表示位置補正X
sy: 0, // 表示位置補正Y
pattern: 0, // 表示パターン
back: -1, // 背景に使う画像インデックス
bx: 0, // 内容の表示位置補正X
by: 0, // 内容の表示位置補正Y
extend: "", //
fixed: true, //
anchorX: 0.5,
anchorY: 0.5,
battler: null,
se: { name: "", volume: 90, pitch: 100, pan: 0 },
enableOutEffect: true,
};
var array = [
"x",
"y",
"text",
"eventId",
"count",
"delay",
"moveX",
"moveY",
"sx",
"sy",
"pattern",
"back",
"bx",
"by",
"extend",
"fixed",
"anchorX",
"anchorY",
"slideCount",
];
for (var i = 0; i < argParam.length; i++) {
if (i > 0) {
for (var j = 0; j < array.length; j++) {
var r = new RegExp("^(" + array[j] + ")" + ":(.+)");
if (argParam[i].match(r)) {
var code = RegExp.$1;
var value = RegExp.$2;
if (code === "text" || code === "extend") {
arg[code] = value;
} else if (code === "fixed") {
arg[code] = value === "true";
} else if (code === "back") {
arg[code] = Number(value) !== NaN ? value : Number(value);
} else {
arg[code] = Number(value);
}
}
}
}
}
if (arg.x === null) {
if (character) {
var screenX = $gameParty.inBattle() ? 0 : character.screenX();
var displayX = $gameParty.inBattle() ? 0 : $gameMap._displayX * 48;
arg.x = screenX + displayX;
} else {
arg.x = 0;
}
}
if (arg.y === null) {
if (character) {
var screenY = $gameParty.inBattle() ? 0 : character.screenY();
var displayY = $gameParty.inBattle() ? 0 : $gameMap._displayY * 48;
arg.y = screenY + displayY;
} else {
arg.y = 0;
}
}
if (arg.extend) {
arg.extend = eval(arg.extend);
}
arg.terminate = false;
return arg;
};
CommonPopupManager.setPopUpdate = function () {
if (this._readyPopup) {
for (var i = 0; i < this._readyPopup.length; i++) {
if (this._readyPopup[i]) {
var arg = this._readyPopup[i];
if (ImageManager.isReady()) {
this.startPopup(arg);
delete this._readyPopup[i];
this._readyPopup.compact();
return;
} else {
this.bltCheck(this.makeBitmap(arg));
}
}
}
}
};
CommonPopupManager.makeBitmap = function (arg) {
if (typeof arg.back === "number") {
var fileName = commonPopupTextBackFileName;
fileName = fileName.replace(/%d/g, arg.back);
return ImageManager.loadSystem(fileName);
} else {
var fileName = arg.back;
return ImageManager.loadPicture(fileName);
}
};
CommonPopupManager.bltCheck = function (bitmap) {
this.testBitmap().blt(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0);
//this.testBitmap().clear();
//bitmap.clear();
bitmap = null;
};
CommonPopupManager.startPopup = function (arg) {
CommonPopupManager._tempCommonSprites.setNullPos(arg);
};
CommonPopupManager.clearPopup = function (tag) {
if (!CommonPopupManager._tempCommonSprites) {
CommonPopupManager.initTempSprites();
}
for (var i = 0; i < CommonPopupManager._tempCommonSprites.length; i++) {
if (CommonPopupManager._tempCommonSprites[i]) {
if (!tag || tag === CommonPopupManager._tempCommonSprites[i].tag) {
CommonPopupManager._tempCommonSprites[i].delay = 0;
CommonPopupManager._tempCommonSprites[i].count = 1;
var sprite = CommonPopupManager._tempCommonSprites[i].sprite;
if (sprite) sprite._count = 1;
}
}
}
};
var _cPU_SsBase_initialize = Spriteset_Base.prototype.initialize;
Spriteset_Base.prototype.initialize = function () {
_cPU_SsBase_initialize.call(this);
this.createSpritePopup();
};
var _cPU_SsBase_update = Spriteset_Base.prototype.update;
Spriteset_Base.prototype.update = function () {
_cPU_SsBase_update.call(this);
if (this._popupContainer === undefined) {
return;
}
if (CommonPopupManager._tempCommonSprites) {
for (var i = 0; i < CommonPopupManager._tempCommonSprites.length; i++) {
if (CommonPopupManager._tempCommonSprites[i]) {
if (CommonPopupManager._tempCommonSprites[i].terminate) {
var sprite = CommonPopupManager._tempCommonSprites[i].sprite;
this._popupContainer.removeChild(sprite);
delete CommonPopupManager._tempCommonSprites[i];
} else if (!CommonPopupManager._tempCommonSprites[i].sprite) {
var sprite = new Sprite_Popup(i);
this._popupContainer.addChild(sprite);
CommonPopupManager._tempCommonSprites[i].sprite = sprite;
}
}
}
}
};
var _cPU_SBase_update = Scene_Base.prototype.update;
Scene_Base.prototype.update = function () {
_cPU_SBase_update.call(this);
if (CommonPopupManager) {
CommonPopupManager.setPopUpdate();
}
};
Spriteset_Base.prototype.createSpritePopup = function () {
var width = Graphics.boxWidth;
var height = Graphics.boxHeight;
var x = (Graphics.width - width) / 2;
var y = (Graphics.height - height) / 2;
this._popupContainer = new Sprite();
this._popupContainer.setFrame(x, y, width, height);
this.addChild(this._popupContainer);
};
var _cPU_SBase_terminate = Scene_Base.prototype.terminate;
Scene_Base.prototype.terminate = function () {
_cPU_SBase_terminate.call(this);
this.terminatePopup();
};
Scene_Base.prototype.terminatePopup = function () {
if (!CommonPopupManager._tempCommonSprites) {
CommonPopupManager.initTempSprites();
}
for (var i = 0; i < CommonPopupManager._tempCommonSprites.length; i++) {
if (CommonPopupManager._tempCommonSprites[i]) {
var sprite = CommonPopupManager._tempCommonSprites[i].sprite;
if (sprite) sprite.terminate();
delete CommonPopupManager._tempCommonSprites[i];
}
}
CommonPopupManager._setedPopupss = [];
CommonPopupManager._readyPopup = [];
};
var _cPU_SMap_launchBattle = Scene_Map.prototype.launchBattle;
Scene_Map.prototype.launchBattle = function () {
_cPU_SMap_launchBattle.call(this);
this.terminatePopup();
};
// 再定義 文字サイズに合わせてアイコンのサイズを調整する
Window_Base.prototype.drawIcon = function (iconIndex, x, y) {
var bitmap = ImageManager.loadSystem("IconSet");
var pw = Window_Base._iconWidth;
var ph = Window_Base._iconHeight;
var sx = (iconIndex % 16) * pw;
var sy = Math.floor(iconIndex / 16) * ph;
var n = Math.floor(
(this.contents.fontSize / this.standardFontSize()) *
Window_Base._iconWidth
);
var nn = (32 - n) / 2;
this.contents.blt(bitmap, sx, sy, pw, ph, x, y, n, n);
};
// 再定義 processDrawIconをストレッチされた文字サイズに合わせたズレに調整する
Window_Base.prototype.processDrawIcon = function (iconIndex, textState) {
this.drawIcon(iconIndex, textState.x + 2, textState.y + 2);
var n = Math.floor(
(this.contents.fontSize / this.standardFontSize()) *
Window_Base._iconWidth
);
textState.x += n + 4;
};
if (!Imported.YEP_MessageCore) {
// \FS[FontSize]の制御文字を追加する部分です。
var _cPU_Window_Base_processEscapeCharacter =
Window_Base.prototype.processEscapeCharacter;
Window_Base.prototype.processEscapeCharacter = function (code, textState) {
if (code === "FS") {
var param = this.obtainEscapeParam(textState);
if (param != "") {
this.makeFontSize(param);
}
} else {
_cPU_Window_Base_processEscapeCharacter.call(this, code, textState);
}
};
}
Window_Base.prototype.makeFontSize = function (fontSize) {
this.contents.fontSize = fontSize;
};
})();

View file

@ -0,0 +1,135 @@
/*:
* @plugindesc Plugin used to set basic parameters.
* @author RM CoreScript team
*
* @help This plugin does not provide plugin commands.
*
* @param cacheLimit
* @desc For setting the upper limit of image memory cache. (MPix)
* @default 10
*
* @param screenWidth
* @desc For setting the screen width.
* @default 816
*
* @param screenHeight
* @desc For setting the screen height.
* @default 624
*
* @param changeWindowWidthTo
* @desc If set, change window width to this value
*
* @param changeWindowHeightTo
* @desc If set, change window height to this value
*
* @param renderingMode
* @desc Rendering mode (canvas/webgl/auto)
* @default auto
*
* @param alwaysDash
* @desc To set initial value as to whether the player always dashes. (on/off)
* @default off
*/
/*:ja
* @plugindesc 基本的なパラメーターを設定するプラグインです
* @author RM CoreScript team
*
* @help このプラグインにはプラグインコマンドはありません
*
* @param cacheLimit
* @desc 画像のメモリへのキャッシュの上限値 (MPix)
* @default 10
*
* @param screenWidth
* @desc 画面サイズの幅
* @default 816
*
* @param screenHeight
* @desc 画面サイズの高さ
* @default 624
*
* @param changeWindowWidthTo
* @desc 値が設定された場合ウインドウの幅を指定した値に変更
*
* @param changeWindowHeightTo
* @desc 値が設定された場合ウインドウの高さを指定した値に変更
*
* @param renderingMode
* @desc レンダリングモード (canvas/webgl/auto)
* @default auto
*
* @param alwaysDash
* @desc プレイヤーが常時ダッシュするかどうかの初期値 (on/off)
* @default off
*/
(function () {
function toNumber(str, def) {
return isNaN(str) ? def : +(str || def);
}
var parameters = PluginManager.parameters("Community_Basic");
var cacheLimit = toNumber(parameters["cacheLimit"], 10);
var screenWidth = toNumber(parameters["screenWidth"], 816);
var screenHeight = toNumber(parameters["screenHeight"], 624);
var renderingMode = parameters["renderingMode"].toLowerCase();
var alwaysDash = parameters["alwaysDash"].toLowerCase() === "on";
var windowWidthTo = toNumber(parameters["changeWindowWidthTo"], 0);
var windowHeightTo = toNumber(parameters["changeWindowHeightTo"], 0);
var windowWidth;
var windowHeight;
if (windowWidthTo) {
windowWidth = windowWidthTo;
} else if (screenWidth !== SceneManager._screenWidth) {
windowWidth = screenWidth;
}
if (windowHeightTo) {
windowHeight = windowHeightTo;
} else if (screenHeight !== SceneManager._screenHeight) {
windowHeight = screenHeight;
}
ImageCache.limit = cacheLimit * 1000 * 1000;
SceneManager._screenWidth = screenWidth;
SceneManager._screenHeight = screenHeight;
SceneManager._boxWidth = screenWidth;
SceneManager._boxHeight = screenHeight;
SceneManager.preferableRendererType = function () {
if (Utils.isOptionValid("canvas")) {
return "canvas";
} else if (Utils.isOptionValid("webgl")) {
return "webgl";
} else if (renderingMode === "canvas") {
return "canvas";
} else if (renderingMode === "webgl") {
return "webgl";
} else {
return "auto";
}
};
var _ConfigManager_applyData = ConfigManager.applyData;
ConfigManager.applyData = function (config) {
_ConfigManager_applyData.apply(this, arguments);
if (config["alwaysDash"] === undefined) {
this.alwaysDash = alwaysDash;
}
};
var _SceneManager_initNwjs = SceneManager.initNwjs;
SceneManager.initNwjs = function () {
_SceneManager_initNwjs.apply(this, arguments);
if (Utils.isNwjs() && windowWidth && windowHeight) {
var dw = windowWidth - window.innerWidth;
var dh = windowHeight - window.innerHeight;
window.moveBy(-dw / 2, -dh / 2);
window.resizeBy(dw, dh);
}
};
})();

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,245 @@
//=============================================================================
// CustomizeConfigDefault.js
// ----------------------------------------------------------------------------
// (C)2015 Triacontane
// This plugin is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.1.1 2020/09/13 Mano_InputConfig.jsと併用したとき、Option項目を消していると表示不整合が発生する競合を修正
// 1.1.0 2016/08/01 項目自体を非表示にする機能を追加しました。
// 1.0.3 2016/06/22 多言語対応
// 1.0.2 2016/01/17 競合対策
// 1.0.1 2015/11/01 既存コードの再定義方法を修正(内容に変化なし)
// 1.0.0 2015/11/01 初版
// ----------------------------------------------------------------------------
// [Blog] : https://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================
/*:
* @plugindesc Setting default value for Options
* @author triacontane
*
* @param AlwaysDash
* @desc Always dash(ON/OFF)
* @default OFF
*
* @param CommandRemember
* @desc Command remember(ON/OFF)
* @default OFF
*
* @param BgmVolume
* @desc BGM Volume(0-100)
* @default 100
*
* @param BgsVolume
* @desc BGS Volume(0-100)
* @default 100
*
* @param MeVolume
* @desc ME Volume(0-100)
* @default 100
*
* @param SeVolume
* @desc SE Volume(0-100)
* @default 100
*
* @param EraseAlwaysDash
* @desc Erase AlwaysDash Option(ON/OFF)
* @default OFF
*
* @param EraseCommandRemember
* @desc Erase CommandRemember Option(ON/OFF)
* @default OFF
*
* @param EraseBgmVolume
* @desc Erase BgmVolume Option(ON/OFF)
* @default OFF
*
* @param EraseBgsVolume
* @desc Erase BgsVolume Option(ON/OFF)
* @default OFF
*
* @param EraseMeVolume
* @desc Erase MeVolume Option(ON/OFF)
* @default OFF
*
* @param EraseSeVolume
* @desc Erase SeVolume Option(ON/OFF)
* @default OFF
*
* @help Setting default value for Options.
*
* This plugin is released under the MIT License.
*/
/*:ja
* @plugindesc オプションデフォルト値設定プラグイン
* @author トリアコンタン
*
* @param 常時ダッシュ
* @desc 常にダッシュするShiftキーを押している場合のみ歩行(ON/OFF)
* @default OFF
*
* @param コマンド記憶
* @desc 選択したコマンドを記憶する(ON/OFF)
* @default OFF
*
* @param BGM音量
* @desc BGMの音量0-100
* @default 100
*
* @param BGS音量
* @desc BGSの音量0-100
* @default 100
*
* @param ME音量
* @desc MEの音量0-100
* @default 100
*
* @param SE音量
* @desc SEの音量0-100
* @default 100
*
* @param 常時ダッシュ消去
* @desc 常時ダッシュの項目を非表示にする(ON/OFF)
* @default OFF
*
* @param コマンド記憶消去
* @desc コマンド記憶の項目を非表示にする(ON/OFF)
* @default OFF
*
* @param BGM音量消去
* @desc BGM音量の項目を非表示にする(ON/OFF)
* @default OFF
*
* @param BGS音量消去
* @desc BGS音量の項目を非表示にする(ON/OFF)
* @default OFF
*
* @param ME音量消去
* @desc ME音量の項目を非表示にする(ON/OFF)
* @default OFF
*
* @param SE音量消去
* @desc SE音量の項目を非表示にする(ON/OFF)
* @default OFF
*
* @help オプション画面で設定可能な項目のデフォルト値を指定した値に変更します
* 例えば初回から常時ダッシュをONにしておけば
* プレイヤーが設定を変更する手間を省くことができます
* この処理はconfig.rpgsaveが未作成の場合にのみ実行されます
*
* また項目そのものを消去することもできます
* 例えば戦闘がないゲームではコマンド記憶等は不要なので消去できます
*
* このプラグインにはプラグインコマンドはありません
*
* 利用規約
* 作者に無断で改変再配布が可能で利用形態商用18禁利用等
* についても制限はありません
* このプラグインはもうあなたのものです
*/
(function () {
"use strict";
var pluginName = "CustomizeConfigDefault";
var getParamNumber = function (paramNames, min, max) {
var value = getParamOther(paramNames);
if (arguments.length < 2) min = -Infinity;
if (arguments.length < 3) max = Infinity;
return (parseInt(value, 10) || 0).clamp(min, max);
};
var getParamBoolean = function (paramNames) {
var value = getParamOther(paramNames);
return (value || "").toUpperCase() === "ON";
};
var getParamOther = function (paramNames) {
if (!Array.isArray(paramNames)) paramNames = [paramNames];
for (var i = 0; i < paramNames.length; i++) {
var name = PluginManager.parameters(pluginName)[paramNames[i]];
if (name) return name;
}
return null;
};
//=============================================================================
// パラメータの取得と整形
//=============================================================================
var paramAlwaysDash = getParamBoolean(["AlwaysDash", "常時ダッシュ"]);
var paramCommandRemember = getParamBoolean([
"CommandRemember",
"コマンド記憶",
]);
var paramBgmVolume = getParamNumber(["BgmVolume", "BGM音量"], 0, 100);
var paramBgsVolume = getParamNumber(["BgsVolume", "BGS音量"], 0, 100);
var paramMeVolume = getParamNumber(["MeVolume", "ME音量"], 0, 100);
var paramSeVolume = getParamNumber(["SeVolume", "SE音量"], 0, 100);
var paramEraseAlwaysDash = getParamBoolean([
"EraseAlwaysDash",
"常時ダッシュ消去",
]);
var paramEraseCommandRemember = getParamBoolean([
"EraseCommandRemember",
"コマンド記憶消去",
]);
var paramEraseBgmVolume = getParamBoolean(["EraseBgmVolume", "BGM音量消去"]);
var paramEraseBgsVolume = getParamBoolean(["EraseBgsVolume", "BGS音量消去"]);
var paramEraseMeVolume = getParamBoolean(["EraseMeVolume", "ME音量消去"]);
var paramEraseSeVolume = getParamBoolean(["EraseSeVolume", "SE音量消去"]);
//=============================================================================
// ConfigManager
// それぞれの項目に初期値を与えます。
//=============================================================================
var _ConfigManagerApplyData = ConfigManager.applyData;
ConfigManager.applyData = function (config) {
_ConfigManagerApplyData.apply(this, arguments);
if (config.alwaysDash == null) this.alwaysDash = paramAlwaysDash;
if (config.commandRemember == null)
this.commandRemember = paramCommandRemember;
if (config.bgmVolume == null) this.bgmVolume = paramBgmVolume;
if (config.bgsVolume == null) this.bgsVolume = paramBgsVolume;
if (config.meVolume == null) this.meVolume = paramMeVolume;
if (config.seVolume == null) this.seVolume = paramSeVolume;
};
//=============================================================================
// Window_Options
// パラメータを空白にした項目を除去します。
//=============================================================================
var _Window_Options_makeCommandList =
Window_Options.prototype.makeCommandList;
Window_Options.prototype.makeCommandList = function () {
_Window_Options_makeCommandList.apply(this, arguments);
if (paramEraseAlwaysDash) this.eraseOption("alwaysDash");
if (paramEraseCommandRemember) this.eraseOption("commandRemember");
if (paramEraseBgmVolume) this.eraseOption("bgmVolume");
if (paramEraseBgsVolume) this.eraseOption("bgsVolume");
if (paramEraseMeVolume) this.eraseOption("meVolume");
if (paramEraseSeVolume) this.eraseOption("seVolume");
};
Window_Options.prototype.eraseOption = function (symbol) {
for (var i = 0; i < this._list.length; i++) {
if (this._list[i].symbol === symbol) {
this._list.splice(i, 1);
// for Mano_InputConfig.js
this.adjustIndexManoInputConfig(i);
break;
}
}
};
Window_Options.prototype.adjustIndexManoInputConfig = function (index) {
if (this._gamepadOptionIndex > index) {
this._gamepadOptionIndex -= 1;
}
if (this._keyboardConfigIndex > index) {
this._keyboardConfigIndex -= 1;
}
};
})();

View file

@ -0,0 +1,69 @@
// DarkPlasma_NPCKeepOutRegion 1.0.0
// Copyright (c) 2021 DarkPlasma
// This software is released under the MIT license.
// http://opensource.org/licenses/mit-license.php
/**
* 2021/04/20 1.0.0 公開
*/
/*:ja
* @plugindesc ランダム移動やプレイヤーへ近づくNPCが通れないリージョンを指定する
* @author DarkPlasma
* @license MIT
*
* @target MZ
* @url https://github.com/elleonard/DarkPlasma-MZ-Plugins/tree/release
*
* @param regions
* @desc NPCがカスタム以外の自律移動で通行できないリージョン一覧
* @text リージョン一覧
* @type number[]
* @default []
*
* @help
* version: 1.0.0
* プラグインパラメータで指定したリージョンのマスについて
* イベントがランダムまたは近づく自律移動で通行できなくなります
*
* カスタム移動や移動ルートの指定では通行できます
*/
(() => {
"use strict";
const pluginName = document.currentScript.src.replace(
/^.*\/(.*).js$/,
function () {
return arguments[1];
}
);
const pluginParameters = PluginManager.parameters(pluginName);
const settings = {
regions: JSON.parse(pluginParameters.regions || "[]").map((e) => {
return Number(e || 0);
}),
};
const MOVE_TYPE_CUSTOM = 3;
Game_Map.prototype.isEventKeepOutRegion = function (x, y) {
return settings.regions.includes(this.regionId(x, y));
};
const _Game_Event_isMapPassable = Game_Event.prototype.isMapPassable;
Game_Event.prototype.isMapPassable = function (x, y, d) {
const x2 = $gameMap.roundXWithDirection(x, d);
const y2 = $gameMap.roundYWithDirection(y, d);
if (this.isMoveRangeLimited() && $gameMap.isEventKeepOutRegion(x2, y2)) {
return false;
}
return _Game_Event_isMapPassable.call(this, x, y, d);
};
Game_Event.prototype.isMoveRangeLimited = function () {
return this._moveType !== MOVE_TYPE_CUSTOM && !this.isMoveRouteForcing();
};
})();

View file

@ -0,0 +1,254 @@
//=============================================================================
// EasyLongMessage.js
// ver1.00 2017/11/23
//=============================================================================
/*:
* @plugindesc 簡易長文表示プラグイン
* @author KPoal
*
*
* @param ELMswitchId
* @type number
* @desc 文章のスクロール表示を一括表示モードに切り替えるスイッチ番号です
* @default 10
*
* @param ELMVersion
* @type boolean
* @desc ver1.3.1のツクールMVで作成されたプロジェクトに用いる場合trueにして下さい
* @default false
*
* @help
* 指定のスイッチをONにしている間
* 文章のスクロール表示で入力した文章を画面に一括表示する
* 長文表示モードに切り替わります
*
* スクロール速度の数字を変える事で
* 文章の表示位置を変更できます
* 1:上側表示
* 2:中央表示
* 3:下側表示
*
* また早送りなしにチェックを入れる事で
* 決定キー長押しの早送りで飛ばされなくなります
*
*
* プラグインコマンド
* ELM FixLines 長文表示ウィンドウのウィンドウサイズを固定します
*          0にすると内容に合わせてサイズが変動するようになります
*
* ELM Backtype 長文表示ウィンドウの背景を指定します
*          0:ウィンドウ
*          1:暗くする
*          2:透明
*
* ELM FixLines 5 :ウィンドウサイズを5行で固定する場合
* ELM Backtype 2 :次の長文表示でウィンドウを透明にする場合
*
*
* 注意
* 使用前に必ず適用するプロジェクトの作成バージョンを確認し
* それに応じてELMVersionのパラメータを設定してください
* バージョンはrpg_core.jsをテキストエディタで開いて2行目で確認できます
*
* このプラグインはMITライセンスです
*
*/
(function () {
var parameters = PluginManager.parameters("EasyLongMessage");
var ELMsId = Number(parameters.ELMswitchId);
var ELMVersionselect = String(parameters.ELMVersion);
var nextEvScroll = false;
var FixedLineNumber = 0;
var ELMBackGroundtype = 0;
var _Game_Interpreter_pluginCommand =
Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function (command, args) {
_Game_Interpreter_pluginCommand.call(this, command, args);
if (command === "ELM") {
if (args[0] == "FixLines") {
FixedLineNumber = Number(args[1]);
} else if (args[0] == "Backtype") {
ELMBackGroundtype = Number(args[1]);
} else {
FixedLineNumber = 0;
ELMBackGroundtype = 0;
}
}
};
var _Window_ScrollText_prototype_startMessage =
Window_ScrollText.prototype.startMessage;
Window_ScrollText.prototype.startMessage = function () {
_Window_ScrollText_prototype_startMessage.call(this);
this.open();
};
var _Window_ScrollText_prototype_updateMessage =
Window_ScrollText.prototype.updateMessage;
Window_ScrollText.prototype.updateMessage = function () {
if ($gameSwitches.value(ELMsId) == true) {
this._windowContentsSprite.y = 0;
this.origin.y = 0;
if (this.isFastForward()) {
this.terminateMessage();
}
} else {
if (eval(ELMVersionselect)) {
this._windowContentsSprite.y -= this.scrollSpeed();
if (this._windowContentsSprite.y <= -this.contents.height) {
this.terminateMessage();
}
} else {
_Window_ScrollText_prototype_updateMessage.call(this);
}
}
};
var _Window_ScrollText_prototype_isFastForward =
Window_ScrollText.prototype.isFastForward;
Window_ScrollText.prototype.isFastForward = function () {
if ($gameSwitches.value(ELMsId) == true) {
if (!$gameMessage.scrollNoFast()) {
return (
Input.isRepeated("ok") ||
Input.isRepeated("cancel") ||
TouchInput.isRepeated()
);
} else {
return (
Input.isTriggered("ok") ||
Input.isTriggered("cancel") ||
TouchInput.isTriggered()
);
}
} else {
return _Window_ScrollText_prototype_isFastForward.apply(this);
}
};
var _Window_ScrollText_prototype_refresh =
Window_ScrollText.prototype.refresh;
Window_ScrollText.prototype.refresh = function () {
if ($gameSwitches.value(ELMsId) == true) {
var textState = { index: 0 };
textState.text = this.convertEscapeCharacters(this._text);
this.resetFontSettings();
this._allTextHeight =
this.calcTextHeight(textState, true) + this.standardPadding() * 2;
this.createContents();
this.height = this._allTextHeight;
switch (ELMBackGroundtype) {
case 1:
this.showBackgroundDimmer();
this.opacity = 0;
break;
case 2:
this.hideBackgroundDimmer();
this.opacity = 0;
break;
default:
this.hideBackgroundDimmer();
this.opacity = 255;
break;
}
if (FixedLineNumber == 0) {
var newy =
Graphics.boxHeight - this.contents.height - this.standardPadding();
} else {
var newy =
Graphics.boxHeight -
(FixedLineNumber + 2) * 32 -
this.standardPadding();
}
if ($gameMessage.scrollSpeed() == 1) {
newy = 0;
} else if ($gameMessage.scrollSpeed() == 2) {
newy /= 2;
}
if (FixedLineNumber == 0) {
this.move(
0,
newy,
this.width,
this._allTextHeight + this.standardPadding()
);
} else {
this.move(
0,
newy,
this.width,
(FixedLineNumber + 2) * 32 + this.standardPadding()
);
}
this._windowContentsSprite.y = Graphics.boxHeight;
this.origin.y = 0;
this.drawTextEx(this._text, this.textPadding(), this.standardPadding());
} else {
this.hideBackgroundDimmer();
this.opacity = 0;
if (!eval(ELMVersionselect)) {
_Window_ScrollText_prototype_refresh.call(this);
this.move(0, 0, this.width, Graphics.boxHeight);
this.origin.y = -this.height;
} else {
var textState = { index: 0 };
textState.text = this.convertEscapeCharacters(this._text);
this.resetFontSettings();
this._allTextHeight = this.calcTextHeight(textState, true);
this.createContents();
this.move(
0,
0,
this.width,
this._allTextHeight + this.standardPadding() * 2
);
this._windowContentsSprite.y = Graphics.boxHeight;
this.drawTextEx(this._text, this.textPadding(), 1);
}
}
};
var _Window_ScrollText_prototype_terminateMessage =
Window_ScrollText.prototype.terminateMessage;
Window_ScrollText.prototype.terminateMessage = function () {
if ($gameSwitches.value(ELMsId) == true) {
this._text = null;
$gameMessage.clear();
if (nextEvScroll == false) {
this.hideBackgroundDimmer();
this.close();
}
} else {
_Window_ScrollText_prototype_terminateMessage.call(this);
}
};
// Show Scrolling Text
var _Game_Interpreter_prototype_command105 =
Game_Interpreter.prototype.command105;
Game_Interpreter.prototype.command105 = function () {
if ($gameSwitches.value(ELMsId) == true) {
if (!$gameMessage.isBusy()) {
$gameMessage.setScroll(this._params[0], this._params[1]);
while (this.nextEventCode() === 405) {
this._index++;
$gameMessage.add(this.currentCommand().parameters[0]);
}
if (this.nextEventCode() === 105) {
nextEvScroll = true;
} else {
nextEvScroll = false;
}
this._index++;
this.setWaitMode("message");
}
return false;
} else {
nextEvScroll = false;
_Game_Interpreter_prototype_command105.call(this);
}
};
})();

345
www/js/plugins/EnemyBook.js Normal file
View file

@ -0,0 +1,345 @@
//=============================================================================
// EnemyBook.js
//=============================================================================
/*:
* @plugindesc Displays detailed statuses of enemies.
* @author Yoji Ojima
*
* @param Unknown Data
* @desc The index name for an unknown enemy.
* @default ??????
*
* @help
*
* Plugin Command:
* EnemyBook open # Open the enemy book screen
* EnemyBook add 3 # Add enemy #3 to the enemy book
* EnemyBook remove 4 # Remove enemy #4 from the enemy book
* EnemyBook complete # Complete the enemy book
* EnemyBook clear # Clear the enemy book
*
* Enemy Note:
* <desc1:foobar> # Description text in the enemy book, line 1
* <desc2:blahblah> # Description text in the enemy book, line 2
* <book:no> # This enemy does not appear in the enemy book
*/
/*:ja
* @plugindesc モンスター図鑑です敵キャラの詳細なステータスを表示します
* @author Yoji Ojima
*
* @param Unknown Data
* @desc 未確認の敵キャラの索引名です
* @default
*
* @help
*
* プラグインコマンド:
* EnemyBook open # 図鑑画面を開く
* EnemyBook add 3 # 敵キャラ3番を図鑑に追加
* EnemyBook remove 4 # 敵キャラ4番を図鑑から削除
* EnemyBook complete # 図鑑を完成させる
* EnemyBook clear # 図鑑をクリアする
*
* 敵キャラのメモ:
* <desc1:なんとか> # 説明1行目
* <desc2:かんとか> # 説明2行目
* <book:no> # 図鑑に載せない場合
*/
(function () {
var parameters = PluginManager.parameters("EnemyBook");
var unknownData = String(parameters["Unknown Data"] || "??????");
var _Game_Interpreter_pluginCommand =
Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function (command, args) {
_Game_Interpreter_pluginCommand.call(this, command, args);
if (command === "EnemyBook") {
switch (args[0]) {
case "open":
SceneManager.push(Scene_EnemyBook);
break;
case "add":
$gameSystem.addToEnemyBook(Number(args[1]));
break;
case "remove":
$gameSystem.removeFromEnemyBook(Number(args[1]));
break;
case "complete":
$gameSystem.completeEnemyBook();
break;
case "clear":
$gameSystem.clearEnemyBook();
break;
}
}
};
Game_System.prototype.addToEnemyBook = function (enemyId) {
if (!this._enemyBookFlags) {
this.clearEnemyBook();
}
this._enemyBookFlags[enemyId] = true;
};
Game_System.prototype.removeFromEnemyBook = function (enemyId) {
if (this._enemyBookFlags) {
this._enemyBookFlags[enemyId] = false;
}
};
Game_System.prototype.completeEnemyBook = function () {
this.clearEnemyBook();
for (var i = 1; i < $dataEnemies.length; i++) {
this._enemyBookFlags[i] = true;
}
};
Game_System.prototype.clearEnemyBook = function () {
this._enemyBookFlags = [];
};
Game_System.prototype.isInEnemyBook = function (enemy) {
if (this._enemyBookFlags && enemy) {
return !!this._enemyBookFlags[enemy.id];
} else {
return false;
}
};
var _Game_Troop_setup = Game_Troop.prototype.setup;
Game_Troop.prototype.setup = function (troopId) {
_Game_Troop_setup.call(this, troopId);
this.members().forEach(function (enemy) {
if (enemy.isAppeared()) {
$gameSystem.addToEnemyBook(enemy.enemyId());
}
}, this);
};
var _Game_Enemy_appear = Game_Enemy.prototype.appear;
Game_Enemy.prototype.appear = function () {
_Game_Enemy_appear.call(this);
$gameSystem.addToEnemyBook(this._enemyId);
};
var _Game_Enemy_transform = Game_Enemy.prototype.transform;
Game_Enemy.prototype.transform = function (enemyId) {
_Game_Enemy_transform.call(this, enemyId);
$gameSystem.addToEnemyBook(enemyId);
};
function Scene_EnemyBook() {
this.initialize.apply(this, arguments);
}
Scene_EnemyBook.prototype = Object.create(Scene_MenuBase.prototype);
Scene_EnemyBook.prototype.constructor = Scene_EnemyBook;
Scene_EnemyBook.prototype.initialize = function () {
Scene_MenuBase.prototype.initialize.call(this);
};
Scene_EnemyBook.prototype.create = function () {
Scene_MenuBase.prototype.create.call(this);
this._indexWindow = new Window_EnemyBookIndex(0, 0);
this._indexWindow.setHandler("cancel", this.popScene.bind(this));
var wy = this._indexWindow.height;
var ww = Graphics.boxWidth;
var wh = Graphics.boxHeight - wy;
this._statusWindow = new Window_EnemyBookStatus(0, wy, ww, wh);
this.addWindow(this._indexWindow);
this.addWindow(this._statusWindow);
this._indexWindow.setStatusWindow(this._statusWindow);
};
function Window_EnemyBookIndex() {
this.initialize.apply(this, arguments);
}
Window_EnemyBookIndex.prototype = Object.create(Window_Selectable.prototype);
Window_EnemyBookIndex.prototype.constructor = Window_EnemyBookIndex;
Window_EnemyBookIndex.lastTopRow = 0;
Window_EnemyBookIndex.lastIndex = 0;
Window_EnemyBookIndex.prototype.initialize = function (x, y) {
var width = Graphics.boxWidth;
var height = this.fittingHeight(6);
Window_Selectable.prototype.initialize.call(this, x, y, width, height);
this.refresh();
this.setTopRow(Window_EnemyBookIndex.lastTopRow);
this.select(Window_EnemyBookIndex.lastIndex);
this.activate();
};
Window_EnemyBookIndex.prototype.maxCols = function () {
return 3;
};
Window_EnemyBookIndex.prototype.maxItems = function () {
return this._list ? this._list.length : 0;
};
Window_EnemyBookIndex.prototype.setStatusWindow = function (statusWindow) {
this._statusWindow = statusWindow;
this.updateStatus();
};
Window_EnemyBookIndex.prototype.update = function () {
Window_Selectable.prototype.update.call(this);
this.updateStatus();
};
Window_EnemyBookIndex.prototype.updateStatus = function () {
if (this._statusWindow) {
var enemy = this._list[this.index()];
this._statusWindow.setEnemy(enemy);
}
};
Window_EnemyBookIndex.prototype.refresh = function () {
this._list = [];
for (var i = 1; i < $dataEnemies.length; i++) {
var enemy = $dataEnemies[i];
if (enemy.name && enemy.meta.book !== "no") {
this._list.push(enemy);
}
}
this.createContents();
this.drawAllItems();
};
Window_EnemyBookIndex.prototype.drawItem = function (index) {
var enemy = this._list[index];
var rect = this.itemRectForText(index);
var name;
if ($gameSystem.isInEnemyBook(enemy)) {
name = enemy.name;
} else {
name = unknownData;
}
this.drawText(name, rect.x, rect.y, rect.width);
};
Window_EnemyBookIndex.prototype.processCancel = function () {
Window_Selectable.prototype.processCancel.call(this);
Window_EnemyBookIndex.lastTopRow = this.topRow();
Window_EnemyBookIndex.lastIndex = this.index();
};
function Window_EnemyBookStatus() {
this.initialize.apply(this, arguments);
}
Window_EnemyBookStatus.prototype = Object.create(Window_Base.prototype);
Window_EnemyBookStatus.prototype.constructor = Window_EnemyBookStatus;
Window_EnemyBookStatus.prototype.initialize = function (x, y, width, height) {
Window_Base.prototype.initialize.call(this, x, y, width, height);
this._enemy = null;
this._enemySprite = new Sprite();
this._enemySprite.anchor.x = 0.5;
this._enemySprite.anchor.y = 0.5;
this._enemySprite.x = width / 2 - 20;
this._enemySprite.y = height / 2;
this.addChildToBack(this._enemySprite);
this.refresh();
};
Window_EnemyBookStatus.prototype.setEnemy = function (enemy) {
if (this._enemy !== enemy) {
this._enemy = enemy;
this.refresh();
}
};
Window_EnemyBookStatus.prototype.update = function () {
Window_Base.prototype.update.call(this);
if (this._enemySprite.bitmap) {
var bitmapHeight = this._enemySprite.bitmap.height;
var contentsHeight = this.contents.height;
var scale = 1;
if (bitmapHeight > contentsHeight) {
scale = contentsHeight / bitmapHeight;
}
this._enemySprite.scale.x = scale;
this._enemySprite.scale.y = scale;
}
};
Window_EnemyBookStatus.prototype.refresh = function () {
var enemy = this._enemy;
var x = 0;
var y = 0;
var lineHeight = this.lineHeight();
this.contents.clear();
if (!enemy || !$gameSystem.isInEnemyBook(enemy)) {
this._enemySprite.bitmap = null;
return;
}
var name = enemy.battlerName;
var hue = enemy.battlerHue;
var bitmap;
if ($gameSystem.isSideView()) {
bitmap = ImageManager.loadSvEnemy(name, hue);
} else {
bitmap = ImageManager.loadEnemy(name, hue);
}
this._enemySprite.bitmap = bitmap;
this.resetTextColor();
this.drawText(enemy.name, x, y);
x = this.textPadding();
y = lineHeight + this.textPadding();
for (var i = 0; i < 8; i++) {
this.changeTextColor(this.systemColor());
this.drawText(TextManager.param(i), x, y, 160);
this.resetTextColor();
this.drawText(enemy.params[i], x + 160, y, 60, "right");
y += lineHeight;
}
var rewardsWidth = 280;
x = this.contents.width - rewardsWidth;
y = lineHeight + this.textPadding();
this.resetTextColor();
this.drawText(enemy.exp, x, y);
x += this.textWidth(enemy.exp) + 6;
this.changeTextColor(this.systemColor());
this.drawText(TextManager.expA, x, y);
x += this.textWidth(TextManager.expA + " ");
this.resetTextColor();
this.drawText(enemy.gold, x, y);
x += this.textWidth(enemy.gold) + 6;
this.changeTextColor(this.systemColor());
this.drawText(TextManager.currencyUnit, x, y);
x = this.contents.width - rewardsWidth;
y += lineHeight;
for (var j = 0; j < enemy.dropItems.length; j++) {
var di = enemy.dropItems[j];
if (di.kind > 0) {
var item = Game_Enemy.prototype.itemObject(di.kind, di.dataId);
this.drawItemName(item, x, y, rewardsWidth);
y += lineHeight;
}
}
var descWidth = 480;
x = this.contents.width - descWidth;
y = this.textPadding() + lineHeight * 7;
this.drawTextEx(enemy.meta.desc1, x, y + lineHeight * 0, descWidth);
this.drawTextEx(enemy.meta.desc2, x, y + lineHeight * 1, descWidth);
};
})();

View file

@ -0,0 +1,152 @@
//
// 装備スロット追加特徴 ver1.02
//
// ------------------------------------------------------
// Copyright (c) 2016 Yana
// Released under the MIT license
// http://opensource.org/licenses/mit-license.php
// ------------------------------------------------------
//
// author Yana
//
var Imported = Imported || {};
Imported["EquipSlotAddTrait"] = 1.02;
/*:
* @plugindesc ver1.02/装備スロットを追加する特徴を設定できるようにします
* @author Yana
*
* @help ------------------------------------------------------
* 使用方法
* ------------------------------------------------------
* 特徴を持ったオブジェクトのメモ欄に
* <装備スロット:x+y>
* または
* <AddEquipSlot:x+y>
* と記述することでxのスロットをy個増やします
* +-にすることで減らすことも可能です
*
* 注意
* 初期装備に反映される形で武器を減らさないでください
*
* ------------------------------------------------------
* 利用規約
* ------------------------------------------------------
* 当プラグインはMITライセンスで公開されています
* 使用に制限はありません商用アダルトいずれにも使用できます
* 二次配布も制限はしませんがサポートは行いません
* 著作表示は任意です行わなくても利用できます
* 要するに特に規約はありません
* バグ報告や使用方法等のお問合せはネ実ツクールスレまたはTwitterにお願いします
* https://twitter.com/yanatsuki_
* 素材利用は自己責任でお願いします
* ------------------------------------------------------
* 更新履歴:
* ver1.02:
* 装備欄の数が変化したときエラーが出る可能性のあるバグを修正
* ver1.01:
* 初期装備に反映される形で設定を行った場合装備可能な初期装備まで消えることのあるバグを修正
* ver1.00:
* 公開
*/
(function () {
////////////////////////////////////////////////////////////////////////////////////
"use strict";
var parameters = PluginManager.parameters("EquipSlotAddTrait");
////////////////////////////////////////////////////////////////////////////////////
DataManager.addEquipSlots = function (item) {
if (!item) {
return [];
}
if (item._addEquipSlots === undefined) {
item._addEquipSlots = [];
var texts = item.note.split("\n");
for (var i = 0, max = texts.length; i < max; i++) {
var text = texts[i];
if (text.match(/<(?:装備スロット|AddEquipSlot):(\d+)([+-]\d+)>/)) {
item._addEquipSlots.push([Number(RegExp.$1), Number(RegExp.$2)]);
}
}
}
return item._addEquipSlots;
};
var __DManager_loadGame = DataManager.loadGame;
DataManager.loadGame = function (savefileId) {
var result = __DManager_loadGame.call(this, savefileId);
if (result) {
$gameParty.allMembers().forEach(function (m) {
m.refresh();
});
}
return result;
};
////////////////////////////////////////////////////////////////////////////////////
var __GActor_equipSlots = Game_Actor.prototype.equipSlots;
Game_Actor.prototype.equipSlots = function () {
var slots = __GActor_equipSlots.call(this);
var objects = this.traitObjects().clone();
return objects.reduce(
function (r, to) {
var addSlots = DataManager.addEquipSlots(to);
for (var i = 0, max = addSlots.length; i < max; i++) {
var addSlot = addSlots[i];
for (var j = 0; j < addSlot[1]; j++) {
if (!this._equips[r.length]) {
this._equips[r.length] = new Game_Item();
}
r = r.concat(addSlot[0]);
}
for (var j = 0; j < -addSlot[1]; j++) {
var index = r.indexOf(addSlot[0]);
if (index >= 0) {
r.splice(index, 1);
}
}
}
return r;
}.bind(this),
slots
);
};
var __GActor_initEquips = Game_Actor.prototype.initEquips;
Game_Actor.prototype.initEquips = function (equips) {
var slots = this.equipSlots();
var ary = [];
for (var i = 0, max = equips.length; i < max; i++) {
if (equips[i] === 0 || i === 0 || (i === 1 && this.isDualWield())) {
ary.push(equips[i]);
continue;
}
var obj = $dataArmors[equips[i]];
if (slots.contains(obj.etypeId)) ary.push(equips[i]);
}
__GActor_initEquips.call(this, ary);
};
var __GActor_changeClass = Game_Actor.prototype.changeClass;
Game_Actor.prototype.changeClass = function (classId, keepExp) {
__GActor_changeClass.call(this, classId, keepExp);
var es = this.equipSlots();
for (var i = 0, max = es.length; i < max; i++) {
if (!this._equips[es[i] - 1]) this._equips[es[i] - 1] = new Game_Item();
}
};
////////////////////////////////////////////////////////////////////////////////////
var __WESlot_refresh = Window_EquipSlot.prototype.refresh;
Window_EquipSlot.prototype.refresh = function () {
if (this._actor) {
this._actor.refresh();
}
__WESlot_refresh.call(this);
};
})();

View file

@ -0,0 +1,36 @@
//=============================================================================
// Escape100.js
//=============================================================================
/*:
* @plugindesc 逃げる成功率を100%にする
* @author みこと
*
* @param escapeSwitche
* @desc 逃げる成功率を100%にするスイッチの番号
* @default 10
*
* @help 指定のスイッチがONになっている間戦闘コマンド逃げるを必ず成功させます
* ただしバトルの処理で逃走可能にチェックが入っていない場合は逃げられません
*
* このプラグインにはプラグインコマンドはありません
*/
(function () {
var parameters = PluginManager.parameters("Escape100");
BattleManager.processEscape = function () {
$gameParty.performEscape();
SoundManager.playEscape();
var success = this._preemptive ? true : Math.random() < this._escapeRatio;
if (success || $gameSwitches.value(parameters["escapeSwitche"])) {
this.displayEscapeSuccessMessage();
this._escaped = true;
this.processAbort();
} else {
this.displayEscapeFailureMessage();
this._escapeRatio += 0.1;
$gameParty.clearActions();
this.startTurn();
}
return success;
};
})();

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