Initial Commit
This commit is contained in:
commit
6a0de1848e
93 changed files with 746995 additions and 0 deletions
36
.gitignore
vendored
Normal file
36
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
# Ignore all files
|
||||
*.*
|
||||
|
||||
# Except
|
||||
!*.json
|
||||
!*.js
|
||||
!*.zip
|
||||
!*.7z
|
||||
!*.csv
|
||||
!*.ain
|
||||
!*.fnl
|
||||
!*.ks
|
||||
!*.tjs
|
||||
!*.yaml
|
||||
!Data/*
|
||||
!*.rb
|
||||
!.gitignore
|
||||
!README.md
|
||||
!game.ini
|
||||
|
||||
# Images
|
||||
!NE_0.rpgmvp
|
||||
!NE_e2.rpgmvp
|
||||
!NE_e3.rpgmvp
|
||||
!NE_e4.rpgmvp
|
||||
!NE_e5.rpgmvp
|
||||
!NE_e6.rpgmvp
|
||||
!NE_s2.rpgmvp
|
||||
!NE_s3.rpgmvp
|
||||
!NE_s4.rpgmvp
|
||||
!NE_s5.rpgmvp
|
||||
!NE_s6.rpgmvp
|
||||
!clo.rpgmvp
|
||||
!clo1.rpgmvp
|
||||
!clo2.rpgmvp
|
||||
!clo3.rpgmvp
|
||||
49
README.md
Normal file
49
README.md
Normal 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. 
|
||||
* 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.
|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
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.
|
||||
348
data/Actors.json
Normal file
348
data/Actors.json
Normal file
|
|
@ -0,0 +1,348 @@
|
|||
[
|
||||
null,
|
||||
{
|
||||
"id": 1,
|
||||
"battlerName": "Actor1_1",
|
||||
"characterIndex": 1,
|
||||
"characterName": "o-s-1",
|
||||
"classId": 1,
|
||||
"equips": [
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
3,
|
||||
0
|
||||
],
|
||||
"faceIndex": 0,
|
||||
"faceName": "",
|
||||
"traits": [],
|
||||
"initialLevel": 1,
|
||||
"maxLevel": 99,
|
||||
"name": "佐藤 衛(さとう まもる)",
|
||||
"nickname": "",
|
||||
"note": "",
|
||||
"profile": ""
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"battlerName": "Actor1_1",
|
||||
"characterIndex": 0,
|
||||
"characterName": "o-s-1",
|
||||
"classId": 1,
|
||||
"equips": [
|
||||
2,
|
||||
0,
|
||||
0,
|
||||
3,
|
||||
0
|
||||
],
|
||||
"faceIndex": 0,
|
||||
"faceName": "",
|
||||
"traits": [],
|
||||
"initialLevel": 1,
|
||||
"maxLevel": 99,
|
||||
"name": "佐藤 衛(さとう まもる)",
|
||||
"nickname": "",
|
||||
"note": "",
|
||||
"profile": ""
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"battlerName": "Actor1_3",
|
||||
"characterIndex": 0,
|
||||
"characterName": "o-h-1",
|
||||
"classId": 5,
|
||||
"equips": [
|
||||
31,
|
||||
0,
|
||||
65,
|
||||
5,
|
||||
0
|
||||
],
|
||||
"faceIndex": 2,
|
||||
"faceName": "",
|
||||
"traits": [],
|
||||
"initialLevel": 1,
|
||||
"maxLevel": 99,
|
||||
"name": "朝火 誠(あさひ せい)",
|
||||
"nickname": "",
|
||||
"note": "",
|
||||
"profile": ""
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"battlerName": "Actor1_3",
|
||||
"characterIndex": 1,
|
||||
"characterName": "o-h-1",
|
||||
"classId": 5,
|
||||
"equips": [
|
||||
31,
|
||||
0,
|
||||
65,
|
||||
5,
|
||||
0
|
||||
],
|
||||
"faceIndex": 2,
|
||||
"faceName": "",
|
||||
"traits": [],
|
||||
"initialLevel": 1,
|
||||
"maxLevel": 99,
|
||||
"name": "朝火 誠(あさひ せい)",
|
||||
"nickname": "",
|
||||
"note": "",
|
||||
"profile": ""
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"battlerName": "Actor1_3",
|
||||
"characterIndex": 3,
|
||||
"characterName": "o-h-1",
|
||||
"classId": 5,
|
||||
"equips": [
|
||||
31,
|
||||
0,
|
||||
65,
|
||||
5,
|
||||
0
|
||||
],
|
||||
"faceIndex": 2,
|
||||
"faceName": "",
|
||||
"traits": [],
|
||||
"initialLevel": 1,
|
||||
"maxLevel": 99,
|
||||
"name": "朝火 誠(あさひ せい)",
|
||||
"nickname": "",
|
||||
"note": "",
|
||||
"profile": ""
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"battlerName": "Actor1_3",
|
||||
"characterIndex": 3,
|
||||
"characterName": "o-h-1",
|
||||
"classId": 5,
|
||||
"equips": [
|
||||
31,
|
||||
0,
|
||||
65,
|
||||
5,
|
||||
0
|
||||
],
|
||||
"faceIndex": 2,
|
||||
"faceName": "",
|
||||
"traits": [],
|
||||
"initialLevel": 1,
|
||||
"maxLevel": 99,
|
||||
"name": "朝火 誠(あさひ せい)",
|
||||
"nickname": "",
|
||||
"note": "",
|
||||
"profile": ""
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"battlerName": "",
|
||||
"characterIndex": 0,
|
||||
"characterName": "",
|
||||
"classId": 1,
|
||||
"equips": [
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"faceIndex": 0,
|
||||
"faceName": "",
|
||||
"traits": [],
|
||||
"initialLevel": 1,
|
||||
"maxLevel": 99,
|
||||
"name": "",
|
||||
"nickname": "",
|
||||
"note": "",
|
||||
"profile": ""
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"battlerName": "",
|
||||
"characterIndex": 0,
|
||||
"characterName": "",
|
||||
"classId": 1,
|
||||
"equips": [
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"faceIndex": 0,
|
||||
"faceName": "",
|
||||
"traits": [],
|
||||
"initialLevel": 1,
|
||||
"maxLevel": 99,
|
||||
"name": "",
|
||||
"nickname": "",
|
||||
"note": "",
|
||||
"profile": ""
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"battlerName": "",
|
||||
"characterIndex": 0,
|
||||
"characterName": "",
|
||||
"classId": 1,
|
||||
"equips": [
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"faceIndex": 0,
|
||||
"faceName": "",
|
||||
"traits": [],
|
||||
"initialLevel": 1,
|
||||
"maxLevel": 99,
|
||||
"name": "",
|
||||
"nickname": "",
|
||||
"note": "",
|
||||
"profile": ""
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"battlerName": "",
|
||||
"characterIndex": 0,
|
||||
"characterName": "",
|
||||
"classId": 1,
|
||||
"equips": [
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"faceIndex": 0,
|
||||
"faceName": "",
|
||||
"traits": [],
|
||||
"initialLevel": 1,
|
||||
"maxLevel": 99,
|
||||
"name": "",
|
||||
"nickname": "",
|
||||
"note": "",
|
||||
"profile": ""
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"battlerName": "",
|
||||
"characterIndex": 0,
|
||||
"characterName": "",
|
||||
"classId": 1,
|
||||
"equips": [
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"faceIndex": 0,
|
||||
"faceName": "",
|
||||
"traits": [],
|
||||
"initialLevel": 1,
|
||||
"maxLevel": 99,
|
||||
"name": "",
|
||||
"nickname": "",
|
||||
"note": "",
|
||||
"profile": ""
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"battlerName": "",
|
||||
"characterIndex": 0,
|
||||
"characterName": "",
|
||||
"classId": 1,
|
||||
"equips": [
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"faceIndex": 0,
|
||||
"faceName": "",
|
||||
"traits": [],
|
||||
"initialLevel": 1,
|
||||
"maxLevel": 99,
|
||||
"name": "",
|
||||
"nickname": "",
|
||||
"note": "",
|
||||
"profile": ""
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"battlerName": "",
|
||||
"characterIndex": 0,
|
||||
"characterName": "",
|
||||
"classId": 1,
|
||||
"equips": [
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"faceIndex": 0,
|
||||
"faceName": "",
|
||||
"traits": [],
|
||||
"initialLevel": 1,
|
||||
"maxLevel": 99,
|
||||
"name": "",
|
||||
"nickname": "",
|
||||
"note": "",
|
||||
"profile": ""
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"battlerName": "",
|
||||
"characterIndex": 0,
|
||||
"characterName": "",
|
||||
"classId": 1,
|
||||
"equips": [
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"faceIndex": 0,
|
||||
"faceName": "",
|
||||
"traits": [],
|
||||
"initialLevel": 1,
|
||||
"maxLevel": 99,
|
||||
"name": "",
|
||||
"nickname": "",
|
||||
"note": "",
|
||||
"profile": ""
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"battlerName": "",
|
||||
"characterIndex": 0,
|
||||
"characterName": "",
|
||||
"classId": 1,
|
||||
"equips": [
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"faceIndex": 0,
|
||||
"faceName": "",
|
||||
"traits": [],
|
||||
"initialLevel": 1,
|
||||
"maxLevel": 99,
|
||||
"name": "",
|
||||
"nickname": "",
|
||||
"note": "",
|
||||
"profile": ""
|
||||
}
|
||||
]
|
||||
9659
data/Animations.json
Normal file
9659
data/Animations.json
Normal file
File diff suppressed because it is too large
Load diff
2853
data/Armors.json
Normal file
2853
data/Armors.json
Normal file
File diff suppressed because it is too large
Load diff
7472
data/Classes.json
Normal file
7472
data/Classes.json
Normal file
File diff suppressed because it is too large
Load diff
55
data/CommonEvents.json
Normal file
55
data/CommonEvents.json
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
[
|
||||
null,
|
||||
{
|
||||
"id": 1,
|
||||
"list": [
|
||||
{
|
||||
"code": 0,
|
||||
"indent": 0,
|
||||
"parameters": []
|
||||
}
|
||||
],
|
||||
"name": "",
|
||||
"switchId": 1,
|
||||
"trigger": 0
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"list": [
|
||||
{
|
||||
"code": 0,
|
||||
"indent": 0,
|
||||
"parameters": []
|
||||
}
|
||||
],
|
||||
"name": "",
|
||||
"switchId": 1,
|
||||
"trigger": 0
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"list": [
|
||||
{
|
||||
"code": 0,
|
||||
"indent": 0,
|
||||
"parameters": []
|
||||
}
|
||||
],
|
||||
"name": "",
|
||||
"switchId": 1,
|
||||
"trigger": 0
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"list": [
|
||||
{
|
||||
"code": 0,
|
||||
"indent": 0,
|
||||
"parameters": []
|
||||
}
|
||||
],
|
||||
"name": "",
|
||||
"switchId": 1,
|
||||
"trigger": 0
|
||||
}
|
||||
]
|
||||
358
data/Enemies.json
Normal file
358
data/Enemies.json
Normal file
|
|
@ -0,0 +1,358 @@
|
|||
[
|
||||
null,
|
||||
{
|
||||
"id": 1,
|
||||
"actions": [
|
||||
{
|
||||
"conditionParam1": 0,
|
||||
"conditionParam2": 0,
|
||||
"conditionType": 0,
|
||||
"rating": 5,
|
||||
"skillId": 1
|
||||
},
|
||||
{
|
||||
"skillId": 20,
|
||||
"rating": 5,
|
||||
"conditionType": 0,
|
||||
"conditionParam1": 0,
|
||||
"conditionParam2": 0
|
||||
}
|
||||
],
|
||||
"battlerHue": 0,
|
||||
"battlerName": "Goblin",
|
||||
"dropItems": [
|
||||
{
|
||||
"dataId": 1,
|
||||
"denominator": 1,
|
||||
"kind": 0
|
||||
},
|
||||
{
|
||||
"dataId": 1,
|
||||
"denominator": 1,
|
||||
"kind": 0
|
||||
},
|
||||
{
|
||||
"dataId": 1,
|
||||
"denominator": 1,
|
||||
"kind": 0
|
||||
}
|
||||
],
|
||||
"exp": 10,
|
||||
"traits": [
|
||||
{
|
||||
"code": 22,
|
||||
"dataId": 0,
|
||||
"value": 0.95
|
||||
},
|
||||
{
|
||||
"code": 22,
|
||||
"dataId": 1,
|
||||
"value": 0.05
|
||||
},
|
||||
{
|
||||
"code": 31,
|
||||
"dataId": 1,
|
||||
"value": 0
|
||||
}
|
||||
],
|
||||
"gold": 5,
|
||||
"name": "ゴブリン",
|
||||
"note": "",
|
||||
"params": [
|
||||
200,
|
||||
0,
|
||||
25,
|
||||
20,
|
||||
20,
|
||||
20,
|
||||
20,
|
||||
20
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"actions": [
|
||||
{
|
||||
"conditionParam1": 0,
|
||||
"conditionParam2": 0,
|
||||
"conditionType": 0,
|
||||
"rating": 5,
|
||||
"skillId": 1
|
||||
},
|
||||
{
|
||||
"skillId": 23,
|
||||
"rating": 3,
|
||||
"conditionType": 1,
|
||||
"conditionParam1": 0,
|
||||
"conditionParam2": 2
|
||||
}
|
||||
],
|
||||
"battlerHue": 0,
|
||||
"battlerName": "Gnome",
|
||||
"dropItems": [
|
||||
{
|
||||
"dataId": 1,
|
||||
"denominator": 1,
|
||||
"kind": 0
|
||||
},
|
||||
{
|
||||
"dataId": 1,
|
||||
"denominator": 1,
|
||||
"kind": 0
|
||||
},
|
||||
{
|
||||
"dataId": 1,
|
||||
"denominator": 1,
|
||||
"kind": 0
|
||||
}
|
||||
],
|
||||
"exp": 10,
|
||||
"traits": [
|
||||
{
|
||||
"code": 22,
|
||||
"dataId": 0,
|
||||
"value": 0.95
|
||||
},
|
||||
{
|
||||
"code": 22,
|
||||
"dataId": 1,
|
||||
"value": 0.05
|
||||
},
|
||||
{
|
||||
"code": 31,
|
||||
"dataId": 1,
|
||||
"value": 0
|
||||
}
|
||||
],
|
||||
"gold": 8,
|
||||
"name": "ノーム",
|
||||
"note": "",
|
||||
"params": [
|
||||
250,
|
||||
0,
|
||||
20,
|
||||
25,
|
||||
20,
|
||||
20,
|
||||
20,
|
||||
20
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"actions": [
|
||||
{
|
||||
"conditionParam1": 0,
|
||||
"conditionParam2": 0,
|
||||
"conditionType": 0,
|
||||
"rating": 5,
|
||||
"skillId": 1
|
||||
}
|
||||
],
|
||||
"battlerHue": 0,
|
||||
"battlerName": "Crow",
|
||||
"dropItems": [
|
||||
{
|
||||
"dataId": 1,
|
||||
"denominator": 1,
|
||||
"kind": 0
|
||||
},
|
||||
{
|
||||
"dataId": 1,
|
||||
"denominator": 1,
|
||||
"kind": 0
|
||||
},
|
||||
{
|
||||
"dataId": 1,
|
||||
"denominator": 1,
|
||||
"kind": 0
|
||||
}
|
||||
],
|
||||
"exp": 15,
|
||||
"traits": [
|
||||
{
|
||||
"code": 22,
|
||||
"dataId": 0,
|
||||
"value": 0.95
|
||||
},
|
||||
{
|
||||
"code": 22,
|
||||
"dataId": 1,
|
||||
"value": 0.1
|
||||
},
|
||||
{
|
||||
"code": 31,
|
||||
"dataId": 1,
|
||||
"value": 0
|
||||
}
|
||||
],
|
||||
"gold": 8,
|
||||
"name": "クロウ",
|
||||
"note": "",
|
||||
"params": [
|
||||
250,
|
||||
50,
|
||||
25,
|
||||
20,
|
||||
20,
|
||||
20,
|
||||
25,
|
||||
20
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"actions": [
|
||||
{
|
||||
"conditionParam1": 0,
|
||||
"conditionParam2": 0,
|
||||
"conditionType": 0,
|
||||
"rating": 5,
|
||||
"skillId": 1
|
||||
},
|
||||
{
|
||||
"skillId": 52,
|
||||
"rating": 4,
|
||||
"conditionType": 2,
|
||||
"conditionParam1": 0,
|
||||
"conditionParam2": 0.3
|
||||
}
|
||||
],
|
||||
"battlerHue": 0,
|
||||
"battlerName": "Treant",
|
||||
"dropItems": [
|
||||
{
|
||||
"dataId": 1,
|
||||
"denominator": 1,
|
||||
"kind": 0
|
||||
},
|
||||
{
|
||||
"dataId": 1,
|
||||
"denominator": 1,
|
||||
"kind": 0
|
||||
},
|
||||
{
|
||||
"dataId": 1,
|
||||
"denominator": 1,
|
||||
"kind": 0
|
||||
}
|
||||
],
|
||||
"exp": 30,
|
||||
"traits": [
|
||||
{
|
||||
"code": 22,
|
||||
"dataId": 0,
|
||||
"value": 0.95
|
||||
},
|
||||
{
|
||||
"code": 22,
|
||||
"dataId": 1,
|
||||
"value": 0.05
|
||||
},
|
||||
{
|
||||
"code": 31,
|
||||
"dataId": 1,
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"code": 11,
|
||||
"dataId": 2,
|
||||
"value": 2
|
||||
}
|
||||
],
|
||||
"gold": 15,
|
||||
"name": "トレント",
|
||||
"note": "",
|
||||
"params": [
|
||||
500,
|
||||
50,
|
||||
30,
|
||||
20,
|
||||
30,
|
||||
30,
|
||||
30,
|
||||
30
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"actions": [
|
||||
{
|
||||
"conditionParam1": 0,
|
||||
"conditionParam2": 0,
|
||||
"conditionType": 0,
|
||||
"rating": 5,
|
||||
"skillId": 1
|
||||
},
|
||||
{
|
||||
"skillId": 99,
|
||||
"rating": 4,
|
||||
"conditionType": 1,
|
||||
"conditionParam1": 0,
|
||||
"conditionParam2": 2
|
||||
},
|
||||
{
|
||||
"skillId": 13,
|
||||
"rating": 6,
|
||||
"conditionType": 2,
|
||||
"conditionParam1": 0,
|
||||
"conditionParam2": 0.3
|
||||
}
|
||||
],
|
||||
"battlerHue": 0,
|
||||
"battlerName": "Hi_monster",
|
||||
"dropItems": [
|
||||
{
|
||||
"dataId": 1,
|
||||
"denominator": 1,
|
||||
"kind": 0
|
||||
},
|
||||
{
|
||||
"dataId": 1,
|
||||
"denominator": 1,
|
||||
"kind": 0
|
||||
},
|
||||
{
|
||||
"dataId": 1,
|
||||
"denominator": 1,
|
||||
"kind": 0
|
||||
}
|
||||
],
|
||||
"exp": 100,
|
||||
"traits": [
|
||||
{
|
||||
"code": 22,
|
||||
"dataId": 0,
|
||||
"value": 0.95
|
||||
},
|
||||
{
|
||||
"code": 22,
|
||||
"dataId": 1,
|
||||
"value": 0.05
|
||||
},
|
||||
{
|
||||
"code": 31,
|
||||
"dataId": 1,
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"code": 63,
|
||||
"dataId": 1,
|
||||
"value": 1
|
||||
}
|
||||
],
|
||||
"gold": 50,
|
||||
"name": "魔獣",
|
||||
"note": "",
|
||||
"params": [
|
||||
1000,
|
||||
50,
|
||||
40,
|
||||
20,
|
||||
40,
|
||||
40,
|
||||
40,
|
||||
40
|
||||
]
|
||||
}
|
||||
]
|
||||
982
data/Items.json
Normal file
982
data/Items.json
Normal file
|
|
@ -0,0 +1,982 @@
|
|||
[
|
||||
null,
|
||||
{
|
||||
"id": 1,
|
||||
"animationId": 0,
|
||||
"consumable": true,
|
||||
"damage": {
|
||||
"critical": false,
|
||||
"elementId": 0,
|
||||
"formula": "0",
|
||||
"type": 0,
|
||||
"variance": 20
|
||||
},
|
||||
"description": "回復アイテムより上位に表示したいアイテム用の枠です。",
|
||||
"effects": [],
|
||||
"hitType": 0,
|
||||
"iconIndex": 0,
|
||||
"itypeId": 1,
|
||||
"name": "-----予備",
|
||||
"note": "",
|
||||
"occasion": 3,
|
||||
"price": 0,
|
||||
"repeats": 1,
|
||||
"scope": 7,
|
||||
"speed": 0,
|
||||
"successRate": 100,
|
||||
"tpGain": 0
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"animationId": 0,
|
||||
"consumable": true,
|
||||
"damage": {
|
||||
"critical": false,
|
||||
"elementId": 0,
|
||||
"formula": "0",
|
||||
"type": 0,
|
||||
"variance": 20
|
||||
},
|
||||
"description": "",
|
||||
"effects": [],
|
||||
"hitType": 0,
|
||||
"iconIndex": 0,
|
||||
"itypeId": 1,
|
||||
"name": "",
|
||||
"note": "",
|
||||
"occasion": 0,
|
||||
"price": 0,
|
||||
"repeats": 1,
|
||||
"scope": 7,
|
||||
"speed": 0,
|
||||
"successRate": 100,
|
||||
"tpGain": 0
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"animationId": 0,
|
||||
"consumable": true,
|
||||
"damage": {
|
||||
"critical": false,
|
||||
"elementId": 0,
|
||||
"formula": "0",
|
||||
"type": 0,
|
||||
"variance": 20
|
||||
},
|
||||
"description": "",
|
||||
"effects": [],
|
||||
"hitType": 0,
|
||||
"iconIndex": 0,
|
||||
"itypeId": 1,
|
||||
"name": "",
|
||||
"note": "",
|
||||
"occasion": 0,
|
||||
"price": 0,
|
||||
"repeats": 1,
|
||||
"scope": 7,
|
||||
"speed": 0,
|
||||
"successRate": 100,
|
||||
"tpGain": 0
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"animationId": 0,
|
||||
"consumable": true,
|
||||
"damage": {
|
||||
"critical": false,
|
||||
"elementId": 0,
|
||||
"formula": "0",
|
||||
"type": 0,
|
||||
"variance": 20
|
||||
},
|
||||
"description": "",
|
||||
"effects": [],
|
||||
"hitType": 0,
|
||||
"iconIndex": 0,
|
||||
"itypeId": 1,
|
||||
"name": "",
|
||||
"note": "",
|
||||
"occasion": 0,
|
||||
"price": 0,
|
||||
"repeats": 1,
|
||||
"scope": 7,
|
||||
"speed": 0,
|
||||
"successRate": 100,
|
||||
"tpGain": 0
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"animationId": 0,
|
||||
"consumable": true,
|
||||
"damage": {
|
||||
"critical": false,
|
||||
"elementId": 0,
|
||||
"formula": "0",
|
||||
"type": 0,
|
||||
"variance": 20
|
||||
},
|
||||
"description": "",
|
||||
"effects": [],
|
||||
"hitType": 0,
|
||||
"iconIndex": 0,
|
||||
"itypeId": 1,
|
||||
"name": "",
|
||||
"note": "",
|
||||
"occasion": 0,
|
||||
"price": 0,
|
||||
"repeats": 1,
|
||||
"scope": 7,
|
||||
"speed": 0,
|
||||
"successRate": 100,
|
||||
"tpGain": 0
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"animationId": 0,
|
||||
"consumable": true,
|
||||
"damage": {
|
||||
"critical": false,
|
||||
"elementId": 0,
|
||||
"formula": "0",
|
||||
"type": 0,
|
||||
"variance": 20
|
||||
},
|
||||
"description": "",
|
||||
"effects": [],
|
||||
"hitType": 0,
|
||||
"iconIndex": 0,
|
||||
"itypeId": 1,
|
||||
"name": "-----回復系",
|
||||
"note": "",
|
||||
"occasion": 3,
|
||||
"price": 0,
|
||||
"repeats": 1,
|
||||
"scope": 7,
|
||||
"speed": 0,
|
||||
"successRate": 100,
|
||||
"tpGain": 0
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"animationId": 41,
|
||||
"consumable": true,
|
||||
"damage": {
|
||||
"critical": false,
|
||||
"elementId": 0,
|
||||
"formula": "0",
|
||||
"type": 0,
|
||||
"variance": 20
|
||||
},
|
||||
"description": "HPを500ポイント回復する。",
|
||||
"effects": [
|
||||
{
|
||||
"code": 11,
|
||||
"dataId": 0,
|
||||
"value1": 0,
|
||||
"value2": 500
|
||||
}
|
||||
],
|
||||
"hitType": 0,
|
||||
"iconIndex": 176,
|
||||
"itypeId": 1,
|
||||
"name": "ポーション",
|
||||
"note": "",
|
||||
"occasion": 0,
|
||||
"price": 100,
|
||||
"repeats": 1,
|
||||
"scope": 7,
|
||||
"speed": 0,
|
||||
"successRate": 100,
|
||||
"tpGain": 0
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"animationId": 41,
|
||||
"consumable": true,
|
||||
"damage": {
|
||||
"critical": false,
|
||||
"elementId": 0,
|
||||
"formula": "0",
|
||||
"type": 0,
|
||||
"variance": 20
|
||||
},
|
||||
"description": "HPを1500ポイント回復する。",
|
||||
"effects": [
|
||||
{
|
||||
"code": 11,
|
||||
"dataId": 0,
|
||||
"value1": 0,
|
||||
"value2": 1500
|
||||
}
|
||||
],
|
||||
"hitType": 0,
|
||||
"iconIndex": 176,
|
||||
"itypeId": 1,
|
||||
"name": "ハイポーション",
|
||||
"note": "",
|
||||
"occasion": 0,
|
||||
"price": 250,
|
||||
"repeats": 1,
|
||||
"scope": 7,
|
||||
"speed": 0,
|
||||
"successRate": 100,
|
||||
"tpGain": 0
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"animationId": 41,
|
||||
"consumable": true,
|
||||
"damage": {
|
||||
"critical": false,
|
||||
"elementId": 0,
|
||||
"formula": "0",
|
||||
"type": 0,
|
||||
"variance": 20
|
||||
},
|
||||
"description": "HPを完全に回復する。",
|
||||
"effects": [
|
||||
{
|
||||
"code": 11,
|
||||
"dataId": 0,
|
||||
"value1": 1,
|
||||
"value2": 0
|
||||
}
|
||||
],
|
||||
"hitType": 0,
|
||||
"iconIndex": 176,
|
||||
"itypeId": 1,
|
||||
"name": "フルポーション",
|
||||
"note": "",
|
||||
"occasion": 0,
|
||||
"price": 550,
|
||||
"repeats": 1,
|
||||
"scope": 7,
|
||||
"speed": 0,
|
||||
"successRate": 100,
|
||||
"tpGain": 0
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"animationId": 41,
|
||||
"consumable": true,
|
||||
"damage": {
|
||||
"critical": false,
|
||||
"elementId": 0,
|
||||
"formula": "0",
|
||||
"type": 0,
|
||||
"variance": 20
|
||||
},
|
||||
"description": "MPを300ポイント回復する。",
|
||||
"effects": [
|
||||
{
|
||||
"code": 12,
|
||||
"dataId": 0,
|
||||
"value1": 0,
|
||||
"value2": 300
|
||||
}
|
||||
],
|
||||
"hitType": 0,
|
||||
"iconIndex": 176,
|
||||
"itypeId": 1,
|
||||
"name": "マジックウォーター",
|
||||
"note": "",
|
||||
"occasion": 0,
|
||||
"price": 300,
|
||||
"repeats": 1,
|
||||
"scope": 7,
|
||||
"speed": 0,
|
||||
"successRate": 100,
|
||||
"tpGain": 0
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"animationId": 49,
|
||||
"consumable": true,
|
||||
"damage": {
|
||||
"critical": false,
|
||||
"elementId": 0,
|
||||
"formula": "b.mhp / 2",
|
||||
"type": 3,
|
||||
"variance": 20
|
||||
},
|
||||
"description": "戦闘不能から復活させる。(HP半分回復)",
|
||||
"effects": [
|
||||
{
|
||||
"code": 22,
|
||||
"dataId": 1,
|
||||
"value1": 1,
|
||||
"value2": 0
|
||||
}
|
||||
],
|
||||
"hitType": 0,
|
||||
"iconIndex": 176,
|
||||
"itypeId": 1,
|
||||
"name": "スティミュラント",
|
||||
"note": "",
|
||||
"occasion": 0,
|
||||
"price": 500,
|
||||
"repeats": 1,
|
||||
"scope": 9,
|
||||
"speed": 0,
|
||||
"successRate": 100,
|
||||
"tpGain": 0
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"animationId": 46,
|
||||
"consumable": true,
|
||||
"damage": {
|
||||
"critical": false,
|
||||
"elementId": 0,
|
||||
"formula": "0",
|
||||
"type": 0,
|
||||
"variance": 20
|
||||
},
|
||||
"description": "戦闘不能以外の状態異常を回復する。",
|
||||
"effects": [
|
||||
{
|
||||
"code": 22,
|
||||
"dataId": 4,
|
||||
"value1": 1,
|
||||
"value2": 0
|
||||
},
|
||||
{
|
||||
"code": 22,
|
||||
"dataId": 5,
|
||||
"value1": 1,
|
||||
"value2": 0
|
||||
},
|
||||
{
|
||||
"code": 22,
|
||||
"dataId": 6,
|
||||
"value1": 1,
|
||||
"value2": 0
|
||||
},
|
||||
{
|
||||
"code": 22,
|
||||
"dataId": 7,
|
||||
"value1": 1,
|
||||
"value2": 0
|
||||
},
|
||||
{
|
||||
"code": 22,
|
||||
"dataId": 8,
|
||||
"value1": 1,
|
||||
"value2": 0
|
||||
},
|
||||
{
|
||||
"code": 22,
|
||||
"dataId": 9,
|
||||
"value1": 1,
|
||||
"value2": 0
|
||||
},
|
||||
{
|
||||
"code": 22,
|
||||
"dataId": 10,
|
||||
"value1": 1,
|
||||
"value2": 0
|
||||
},
|
||||
{
|
||||
"code": 22,
|
||||
"dataId": 13,
|
||||
"value1": 1,
|
||||
"value2": 0
|
||||
},
|
||||
{
|
||||
"code": 22,
|
||||
"dataId": 12,
|
||||
"value1": 1,
|
||||
"value2": 0
|
||||
}
|
||||
],
|
||||
"hitType": 0,
|
||||
"iconIndex": 176,
|
||||
"itypeId": 1,
|
||||
"name": "ディスペルハーブ",
|
||||
"note": "",
|
||||
"occasion": 0,
|
||||
"price": 200,
|
||||
"repeats": 1,
|
||||
"scope": 7,
|
||||
"speed": 0,
|
||||
"successRate": 100,
|
||||
"tpGain": 0
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"animationId": 45,
|
||||
"consumable": true,
|
||||
"damage": {
|
||||
"critical": false,
|
||||
"elementId": 0,
|
||||
"formula": "0",
|
||||
"type": 0,
|
||||
"variance": 20
|
||||
},
|
||||
"description": "毒、麻痺状態を治療する。",
|
||||
"effects": [
|
||||
{
|
||||
"code": 22,
|
||||
"dataId": 4,
|
||||
"value1": 1,
|
||||
"value2": 0
|
||||
},
|
||||
{
|
||||
"code": 22,
|
||||
"dataId": 12,
|
||||
"value1": 1,
|
||||
"value2": 0
|
||||
}
|
||||
],
|
||||
"hitType": 0,
|
||||
"iconIndex": 176,
|
||||
"itypeId": 1,
|
||||
"name": "アンチドーテ",
|
||||
"note": "",
|
||||
"occasion": 0,
|
||||
"price": 80,
|
||||
"repeats": 1,
|
||||
"scope": 7,
|
||||
"speed": 0,
|
||||
"successRate": 100,
|
||||
"tpGain": 0
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"animationId": 41,
|
||||
"consumable": true,
|
||||
"damage": {
|
||||
"critical": false,
|
||||
"elementId": 0,
|
||||
"formula": "0",
|
||||
"type": 0,
|
||||
"variance": 20
|
||||
},
|
||||
"description": "HPとMPを半分回復する。",
|
||||
"effects": [
|
||||
{
|
||||
"code": 11,
|
||||
"dataId": 0,
|
||||
"value1": 0.5,
|
||||
"value2": 0
|
||||
},
|
||||
{
|
||||
"code": 12,
|
||||
"dataId": 0,
|
||||
"value1": 0.5,
|
||||
"value2": 0
|
||||
}
|
||||
],
|
||||
"hitType": 0,
|
||||
"iconIndex": 176,
|
||||
"itypeId": 1,
|
||||
"name": "ミラクルドロップ",
|
||||
"note": "",
|
||||
"occasion": 0,
|
||||
"price": 450,
|
||||
"repeats": 1,
|
||||
"scope": 7,
|
||||
"speed": 0,
|
||||
"successRate": 100,
|
||||
"tpGain": 0
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"animationId": 41,
|
||||
"consumable": true,
|
||||
"damage": {
|
||||
"critical": false,
|
||||
"elementId": 0,
|
||||
"formula": "0",
|
||||
"type": 0,
|
||||
"variance": 20
|
||||
},
|
||||
"description": "HPとMPを完全に回復する。",
|
||||
"effects": [
|
||||
{
|
||||
"code": 11,
|
||||
"dataId": 0,
|
||||
"value1": 1,
|
||||
"value2": 0
|
||||
},
|
||||
{
|
||||
"code": 12,
|
||||
"dataId": 0,
|
||||
"value1": 1,
|
||||
"value2": 0
|
||||
}
|
||||
],
|
||||
"hitType": 0,
|
||||
"iconIndex": 176,
|
||||
"itypeId": 1,
|
||||
"name": "エリクサー",
|
||||
"note": "",
|
||||
"occasion": 0,
|
||||
"price": 1200,
|
||||
"repeats": 1,
|
||||
"scope": 7,
|
||||
"speed": 0,
|
||||
"successRate": 100,
|
||||
"tpGain": 0
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"animationId": 0,
|
||||
"consumable": true,
|
||||
"damage": {
|
||||
"critical": false,
|
||||
"elementId": 0,
|
||||
"formula": "0",
|
||||
"type": 0,
|
||||
"variance": 20
|
||||
},
|
||||
"description": "",
|
||||
"effects": [],
|
||||
"hitType": 0,
|
||||
"iconIndex": 0,
|
||||
"itypeId": 1,
|
||||
"name": "",
|
||||
"note": "",
|
||||
"occasion": 0,
|
||||
"price": 0,
|
||||
"repeats": 1,
|
||||
"scope": 7,
|
||||
"speed": 0,
|
||||
"successRate": 100,
|
||||
"tpGain": 0
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"animationId": 0,
|
||||
"consumable": true,
|
||||
"damage": {
|
||||
"critical": false,
|
||||
"elementId": 0,
|
||||
"formula": "0",
|
||||
"type": 0,
|
||||
"variance": 20
|
||||
},
|
||||
"description": "",
|
||||
"effects": [],
|
||||
"hitType": 0,
|
||||
"iconIndex": 0,
|
||||
"itypeId": 1,
|
||||
"name": "-----特殊系",
|
||||
"note": "",
|
||||
"occasion": 3,
|
||||
"price": 0,
|
||||
"repeats": 1,
|
||||
"scope": 7,
|
||||
"speed": 0,
|
||||
"successRate": 100,
|
||||
"tpGain": 0
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"animationId": 51,
|
||||
"consumable": true,
|
||||
"damage": {
|
||||
"critical": false,
|
||||
"elementId": 0,
|
||||
"formula": "0",
|
||||
"type": 0,
|
||||
"variance": 20
|
||||
},
|
||||
"description": "しばらくの間、敵との遭遇率を半減させる。",
|
||||
"effects": [
|
||||
{
|
||||
"code": 21,
|
||||
"dataId": 29,
|
||||
"value1": 1,
|
||||
"value2": 0
|
||||
}
|
||||
],
|
||||
"hitType": 0,
|
||||
"iconIndex": 176,
|
||||
"itypeId": 1,
|
||||
"name": "エンカウントダウナー",
|
||||
"note": "",
|
||||
"occasion": 2,
|
||||
"price": 100,
|
||||
"repeats": 1,
|
||||
"scope": 11,
|
||||
"speed": 0,
|
||||
"successRate": 100,
|
||||
"tpGain": 0
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"animationId": 51,
|
||||
"consumable": true,
|
||||
"damage": {
|
||||
"critical": false,
|
||||
"elementId": 0,
|
||||
"formula": "0",
|
||||
"type": 0,
|
||||
"variance": 20
|
||||
},
|
||||
"description": "しばらくの間\n戦闘で得られるアイテムや賞金の獲得率を上げる。",
|
||||
"effects": [
|
||||
{
|
||||
"code": 21,
|
||||
"dataId": 30,
|
||||
"value1": 1,
|
||||
"value2": 0
|
||||
}
|
||||
],
|
||||
"hitType": 0,
|
||||
"iconIndex": 176,
|
||||
"itypeId": 1,
|
||||
"name": "ドロップアッパー",
|
||||
"note": "",
|
||||
"occasion": 0,
|
||||
"price": 300,
|
||||
"repeats": 1,
|
||||
"scope": 11,
|
||||
"speed": 0,
|
||||
"successRate": 100,
|
||||
"tpGain": 0
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"animationId": 0,
|
||||
"consumable": true,
|
||||
"damage": {
|
||||
"critical": false,
|
||||
"elementId": 0,
|
||||
"formula": "0",
|
||||
"type": 0,
|
||||
"variance": 20
|
||||
},
|
||||
"description": "",
|
||||
"effects": [],
|
||||
"hitType": 0,
|
||||
"iconIndex": 0,
|
||||
"itypeId": 1,
|
||||
"name": "",
|
||||
"note": "",
|
||||
"occasion": 0,
|
||||
"price": 0,
|
||||
"repeats": 1,
|
||||
"scope": 7,
|
||||
"speed": 0,
|
||||
"successRate": 100,
|
||||
"tpGain": 0
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"animationId": 0,
|
||||
"consumable": true,
|
||||
"damage": {
|
||||
"critical": false,
|
||||
"elementId": 0,
|
||||
"formula": "0",
|
||||
"type": 0,
|
||||
"variance": 20
|
||||
},
|
||||
"description": "",
|
||||
"effects": [],
|
||||
"hitType": 0,
|
||||
"iconIndex": 0,
|
||||
"itypeId": 1,
|
||||
"name": "",
|
||||
"note": "",
|
||||
"occasion": 0,
|
||||
"price": 0,
|
||||
"repeats": 1,
|
||||
"scope": 7,
|
||||
"speed": 0,
|
||||
"successRate": 100,
|
||||
"tpGain": 0
|
||||
},
|
||||
{
|
||||
"id": 22,
|
||||
"animationId": 0,
|
||||
"consumable": true,
|
||||
"damage": {
|
||||
"critical": false,
|
||||
"elementId": 0,
|
||||
"formula": "0",
|
||||
"type": 0,
|
||||
"variance": 20
|
||||
},
|
||||
"description": "",
|
||||
"effects": [],
|
||||
"hitType": 0,
|
||||
"iconIndex": 0,
|
||||
"itypeId": 1,
|
||||
"name": "-----強化系",
|
||||
"note": "",
|
||||
"occasion": 3,
|
||||
"price": 0,
|
||||
"repeats": 1,
|
||||
"scope": 7,
|
||||
"speed": 0,
|
||||
"successRate": 100,
|
||||
"tpGain": 0
|
||||
},
|
||||
{
|
||||
"id": 23,
|
||||
"animationId": 51,
|
||||
"consumable": true,
|
||||
"damage": {
|
||||
"critical": false,
|
||||
"elementId": 0,
|
||||
"formula": "0",
|
||||
"type": 0,
|
||||
"variance": 20
|
||||
},
|
||||
"description": "最大HPを50ポイント上げる。",
|
||||
"effects": [
|
||||
{
|
||||
"code": 42,
|
||||
"dataId": 0,
|
||||
"value1": 50,
|
||||
"value2": 0
|
||||
}
|
||||
],
|
||||
"hitType": 0,
|
||||
"iconIndex": 32,
|
||||
"itypeId": 1,
|
||||
"name": "ライフアップ",
|
||||
"note": "",
|
||||
"occasion": 2,
|
||||
"price": 3000,
|
||||
"repeats": 1,
|
||||
"scope": 7,
|
||||
"speed": 0,
|
||||
"successRate": 100,
|
||||
"tpGain": 0
|
||||
},
|
||||
{
|
||||
"id": 24,
|
||||
"animationId": 51,
|
||||
"consumable": true,
|
||||
"damage": {
|
||||
"critical": false,
|
||||
"elementId": 0,
|
||||
"formula": "0",
|
||||
"type": 0,
|
||||
"variance": 20
|
||||
},
|
||||
"description": "最大MPを10ポイント上げる。",
|
||||
"effects": [
|
||||
{
|
||||
"code": 42,
|
||||
"dataId": 1,
|
||||
"value1": 10,
|
||||
"value2": 0
|
||||
}
|
||||
],
|
||||
"hitType": 0,
|
||||
"iconIndex": 33,
|
||||
"itypeId": 1,
|
||||
"name": "マナアップ",
|
||||
"note": "",
|
||||
"occasion": 2,
|
||||
"price": 3000,
|
||||
"repeats": 1,
|
||||
"scope": 7,
|
||||
"speed": 0,
|
||||
"successRate": 100,
|
||||
"tpGain": 0
|
||||
},
|
||||
{
|
||||
"id": 25,
|
||||
"animationId": 51,
|
||||
"consumable": true,
|
||||
"damage": {
|
||||
"critical": false,
|
||||
"elementId": 0,
|
||||
"formula": "0",
|
||||
"type": 0,
|
||||
"variance": 20
|
||||
},
|
||||
"description": "攻撃力を3ポイント上げる。",
|
||||
"effects": [
|
||||
{
|
||||
"code": 42,
|
||||
"dataId": 2,
|
||||
"value1": 3,
|
||||
"value2": 0
|
||||
}
|
||||
],
|
||||
"hitType": 0,
|
||||
"iconIndex": 34,
|
||||
"itypeId": 1,
|
||||
"name": "パワーアップ",
|
||||
"note": "",
|
||||
"occasion": 2,
|
||||
"price": 3000,
|
||||
"repeats": 1,
|
||||
"scope": 7,
|
||||
"speed": 0,
|
||||
"successRate": 100,
|
||||
"tpGain": 0
|
||||
},
|
||||
{
|
||||
"id": 26,
|
||||
"animationId": 51,
|
||||
"consumable": true,
|
||||
"damage": {
|
||||
"critical": false,
|
||||
"elementId": 0,
|
||||
"formula": "0",
|
||||
"type": 0,
|
||||
"variance": 20
|
||||
},
|
||||
"description": "防御力を3ポイント上げる。",
|
||||
"effects": [
|
||||
{
|
||||
"code": 42,
|
||||
"dataId": 3,
|
||||
"value1": 3,
|
||||
"value2": 0
|
||||
}
|
||||
],
|
||||
"hitType": 0,
|
||||
"iconIndex": 35,
|
||||
"itypeId": 1,
|
||||
"name": "ガードアップ",
|
||||
"note": "",
|
||||
"occasion": 2,
|
||||
"price": 3000,
|
||||
"repeats": 1,
|
||||
"scope": 7,
|
||||
"speed": 0,
|
||||
"successRate": 100,
|
||||
"tpGain": 0
|
||||
},
|
||||
{
|
||||
"id": 27,
|
||||
"animationId": 51,
|
||||
"consumable": true,
|
||||
"damage": {
|
||||
"critical": false,
|
||||
"elementId": 0,
|
||||
"formula": "0",
|
||||
"type": 0,
|
||||
"variance": 20
|
||||
},
|
||||
"description": "魔法力を3ポイント上げる。",
|
||||
"effects": [
|
||||
{
|
||||
"code": 42,
|
||||
"dataId": 4,
|
||||
"value1": 3,
|
||||
"value2": 0
|
||||
}
|
||||
],
|
||||
"hitType": 0,
|
||||
"iconIndex": 36,
|
||||
"itypeId": 1,
|
||||
"name": "マジックアップ",
|
||||
"note": "",
|
||||
"occasion": 2,
|
||||
"price": 3000,
|
||||
"repeats": 1,
|
||||
"scope": 7,
|
||||
"speed": 0,
|
||||
"successRate": 100,
|
||||
"tpGain": 0
|
||||
},
|
||||
{
|
||||
"id": 28,
|
||||
"animationId": 51,
|
||||
"consumable": true,
|
||||
"damage": {
|
||||
"critical": false,
|
||||
"elementId": 0,
|
||||
"formula": "0",
|
||||
"type": 0,
|
||||
"variance": 20
|
||||
},
|
||||
"description": "魔法防御力を3ポイント上げる。",
|
||||
"effects": [
|
||||
{
|
||||
"code": 42,
|
||||
"dataId": 5,
|
||||
"value1": 3,
|
||||
"value2": 0
|
||||
}
|
||||
],
|
||||
"hitType": 0,
|
||||
"iconIndex": 37,
|
||||
"itypeId": 1,
|
||||
"name": "レジストアップ",
|
||||
"note": "",
|
||||
"occasion": 2,
|
||||
"price": 3000,
|
||||
"repeats": 1,
|
||||
"scope": 7,
|
||||
"speed": 0,
|
||||
"successRate": 100,
|
||||
"tpGain": 0
|
||||
},
|
||||
{
|
||||
"id": 29,
|
||||
"animationId": 51,
|
||||
"consumable": true,
|
||||
"damage": {
|
||||
"critical": false,
|
||||
"elementId": 0,
|
||||
"formula": "0",
|
||||
"type": 0,
|
||||
"variance": 20
|
||||
},
|
||||
"description": "敏捷性を3ポイント上げる。",
|
||||
"effects": [
|
||||
{
|
||||
"code": 42,
|
||||
"dataId": 6,
|
||||
"value1": 3,
|
||||
"value2": 0
|
||||
}
|
||||
],
|
||||
"hitType": 0,
|
||||
"iconIndex": 38,
|
||||
"itypeId": 1,
|
||||
"name": "スピードアップ",
|
||||
"note": "",
|
||||
"occasion": 2,
|
||||
"price": 3000,
|
||||
"repeats": 1,
|
||||
"scope": 7,
|
||||
"speed": 0,
|
||||
"successRate": 100,
|
||||
"tpGain": 0
|
||||
},
|
||||
{
|
||||
"id": 30,
|
||||
"animationId": 51,
|
||||
"consumable": true,
|
||||
"damage": {
|
||||
"critical": false,
|
||||
"elementId": 0,
|
||||
"formula": "0",
|
||||
"type": 0,
|
||||
"variance": 20
|
||||
},
|
||||
"description": "運を3ポイント上げる。",
|
||||
"effects": [
|
||||
{
|
||||
"code": 42,
|
||||
"dataId": 7,
|
||||
"value1": 3,
|
||||
"value2": 0
|
||||
}
|
||||
],
|
||||
"hitType": 0,
|
||||
"iconIndex": 39,
|
||||
"itypeId": 1,
|
||||
"name": "ラックアップ",
|
||||
"note": "",
|
||||
"occasion": 2,
|
||||
"price": 3000,
|
||||
"repeats": 1,
|
||||
"scope": 7,
|
||||
"speed": 0,
|
||||
"successRate": 100,
|
||||
"tpGain": 0
|
||||
}
|
||||
]
|
||||
1363
data/Map001.json
Normal file
1363
data/Map001.json
Normal file
File diff suppressed because it is too large
Load diff
9476
data/Map002.json
Normal file
9476
data/Map002.json
Normal file
File diff suppressed because it is too large
Load diff
1663
data/Map003.json
Normal file
1663
data/Map003.json
Normal file
File diff suppressed because it is too large
Load diff
2979
data/Map004.json
Normal file
2979
data/Map004.json
Normal file
File diff suppressed because it is too large
Load diff
9302
data/Map005.json
Normal file
9302
data/Map005.json
Normal file
File diff suppressed because it is too large
Load diff
5754
data/Map006.json
Normal file
5754
data/Map006.json
Normal file
File diff suppressed because it is too large
Load diff
8666
data/Map007.json
Normal file
8666
data/Map007.json
Normal file
File diff suppressed because it is too large
Load diff
4974
data/Map008.json
Normal file
4974
data/Map008.json
Normal file
File diff suppressed because it is too large
Load diff
13500
data/Map009.json
Normal file
13500
data/Map009.json
Normal file
File diff suppressed because it is too large
Load diff
6859
data/Map010.json
Normal file
6859
data/Map010.json
Normal file
File diff suppressed because it is too large
Load diff
6904
data/Map011.json
Normal file
6904
data/Map011.json
Normal file
File diff suppressed because it is too large
Load diff
31231
data/Map012.json
Normal file
31231
data/Map012.json
Normal file
File diff suppressed because it is too large
Load diff
54092
data/Map013.json
Normal file
54092
data/Map013.json
Normal file
File diff suppressed because it is too large
Load diff
2647
data/Map014.json
Normal file
2647
data/Map014.json
Normal file
File diff suppressed because it is too large
Load diff
1363
data/Map015.json
Normal file
1363
data/Map015.json
Normal file
File diff suppressed because it is too large
Load diff
4093
data/Map016.json
Normal file
4093
data/Map016.json
Normal file
File diff suppressed because it is too large
Load diff
48462
data/Map017.json
Normal file
48462
data/Map017.json
Normal file
File diff suppressed because it is too large
Load diff
35701
data/Map018.json
Normal file
35701
data/Map018.json
Normal file
File diff suppressed because it is too large
Load diff
19165
data/Map019.json
Normal file
19165
data/Map019.json
Normal file
File diff suppressed because it is too large
Load diff
7288
data/Map020.json
Normal file
7288
data/Map020.json
Normal file
File diff suppressed because it is too large
Load diff
15597
data/Map021.json
Normal file
15597
data/Map021.json
Normal file
File diff suppressed because it is too large
Load diff
7526
data/Map022.json
Normal file
7526
data/Map022.json
Normal file
File diff suppressed because it is too large
Load diff
5860
data/Map023.json
Normal file
5860
data/Map023.json
Normal file
File diff suppressed because it is too large
Load diff
1363
data/Map024.json
Normal file
1363
data/Map024.json
Normal file
File diff suppressed because it is too large
Load diff
6314
data/Map025.json
Normal file
6314
data/Map025.json
Normal file
File diff suppressed because it is too large
Load diff
15686
data/Map026.json
Normal file
15686
data/Map026.json
Normal file
File diff suppressed because it is too large
Load diff
1552
data/Map027.json
Normal file
1552
data/Map027.json
Normal file
File diff suppressed because it is too large
Load diff
3253
data/Map028.json
Normal file
3253
data/Map028.json
Normal file
File diff suppressed because it is too large
Load diff
3857
data/Map029.json
Normal file
3857
data/Map029.json
Normal file
File diff suppressed because it is too large
Load diff
8811
data/Map030.json
Normal file
8811
data/Map030.json
Normal file
File diff suppressed because it is too large
Load diff
6424
data/Map031.json
Normal file
6424
data/Map031.json
Normal file
File diff suppressed because it is too large
Load diff
4727
data/Map032.json
Normal file
4727
data/Map032.json
Normal file
File diff suppressed because it is too large
Load diff
8312
data/Map033.json
Normal file
8312
data/Map033.json
Normal file
File diff suppressed because it is too large
Load diff
9635
data/Map034.json
Normal file
9635
data/Map034.json
Normal file
File diff suppressed because it is too large
Load diff
8489
data/Map035.json
Normal file
8489
data/Map035.json
Normal file
File diff suppressed because it is too large
Load diff
5130
data/Map036.json
Normal file
5130
data/Map036.json
Normal file
File diff suppressed because it is too large
Load diff
1425
data/Map037.json
Normal file
1425
data/Map037.json
Normal file
File diff suppressed because it is too large
Load diff
7797
data/Map038.json
Normal file
7797
data/Map038.json
Normal file
File diff suppressed because it is too large
Load diff
3133
data/Map039.json
Normal file
3133
data/Map039.json
Normal file
File diff suppressed because it is too large
Load diff
6374
data/Map040.json
Normal file
6374
data/Map040.json
Normal file
File diff suppressed because it is too large
Load diff
10731
data/Map041.json
Normal file
10731
data/Map041.json
Normal file
File diff suppressed because it is too large
Load diff
6725
data/Map042.json
Normal file
6725
data/Map042.json
Normal file
File diff suppressed because it is too large
Load diff
6032
data/Map043.json
Normal file
6032
data/Map043.json
Normal file
File diff suppressed because it is too large
Load diff
1363
data/Map044.json
Normal file
1363
data/Map044.json
Normal file
File diff suppressed because it is too large
Load diff
15686
data/Map045.json
Normal file
15686
data/Map045.json
Normal file
File diff suppressed because it is too large
Load diff
9476
data/Map046.json
Normal file
9476
data/Map046.json
Normal file
File diff suppressed because it is too large
Load diff
2979
data/Map047.json
Normal file
2979
data/Map047.json
Normal file
File diff suppressed because it is too large
Load diff
2896
data/Map048.json
Normal file
2896
data/Map048.json
Normal file
File diff suppressed because it is too large
Load diff
7941
data/Map049.json
Normal file
7941
data/Map049.json
Normal file
File diff suppressed because it is too large
Load diff
461
data/MapInfos.json
Normal file
461
data/MapInfos.json
Normal file
|
|
@ -0,0 +1,461 @@
|
|||
[
|
||||
null,
|
||||
{
|
||||
"id": 1,
|
||||
"expanded": true,
|
||||
"name": "MAP001",
|
||||
"order": 49,
|
||||
"parentId": 0,
|
||||
"scrollX": 411.55555555555554,
|
||||
"scrollY": 320.8888888888889
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"expanded": true,
|
||||
"name": "暗い自室(回想部屋あり)",
|
||||
"order": 14,
|
||||
"parentId": 22,
|
||||
"scrollX": 793.7142857142857,
|
||||
"scrollY": 604.2857142857142
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"expanded": true,
|
||||
"name": "ウィンドウ位置確認用マップ",
|
||||
"order": 2,
|
||||
"parentId": 0,
|
||||
"scrollX": 0,
|
||||
"scrollY": 0,
|
||||
"quick": false
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"expanded": true,
|
||||
"name": "セーブ用マップ 絶対消すな",
|
||||
"order": 3,
|
||||
"parentId": 0,
|
||||
"scrollX": 516,
|
||||
"scrollY": 597.4285714285714,
|
||||
"quick": false
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"expanded": true,
|
||||
"name": "公園",
|
||||
"order": 15,
|
||||
"parentId": 22,
|
||||
"scrollX": 801.4285714285713,
|
||||
"scrollY": 602.5714285714286
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"expanded": true,
|
||||
"name": "過去の自宅",
|
||||
"order": 16,
|
||||
"parentId": 22,
|
||||
"scrollX": 793.7142857142857,
|
||||
"scrollY": 604.2857142857142
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"expanded": true,
|
||||
"name": "受験 学校",
|
||||
"order": 17,
|
||||
"parentId": 22,
|
||||
"scrollX": 832,
|
||||
"scrollY": 944
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"expanded": true,
|
||||
"name": "自宅前",
|
||||
"order": 18,
|
||||
"parentId": 22,
|
||||
"scrollX": 793.7777777777778,
|
||||
"scrollY": 413.77777777777777
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"expanded": true,
|
||||
"name": "倉庫街",
|
||||
"order": 19,
|
||||
"parentId": 22,
|
||||
"scrollX": 848.5714285714286,
|
||||
"scrollY": 738
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"expanded": true,
|
||||
"name": "学校教室",
|
||||
"order": 21,
|
||||
"parentId": 22,
|
||||
"scrollX": 1061.142857142857,
|
||||
"scrollY": 604.2857142857142
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"expanded": false,
|
||||
"name": "真っ暗闇",
|
||||
"order": 13,
|
||||
"parentId": 22,
|
||||
"scrollX": 825.3333333333334,
|
||||
"scrollY": 470,
|
||||
"quick": false
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"expanded": true,
|
||||
"name": "鈴木宅 H用",
|
||||
"order": 37,
|
||||
"parentId": 13,
|
||||
"scrollX": 801.4285714285713,
|
||||
"scrollY": 583.7142857142857
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"expanded": true,
|
||||
"name": "Hシーンまとめ",
|
||||
"order": 36,
|
||||
"parentId": 0,
|
||||
"scrollX": 411.55555555555554,
|
||||
"scrollY": 314.22222222222223,
|
||||
"quick": false
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"expanded": false,
|
||||
"name": "控室 エピ",
|
||||
"order": 32,
|
||||
"parentId": 15,
|
||||
"scrollX": 617.3333333333334,
|
||||
"scrollY": 459.3333333333333,
|
||||
"quick": false
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"expanded": true,
|
||||
"name": "女視点・エピローグまとめ",
|
||||
"order": 28,
|
||||
"parentId": 0,
|
||||
"scrollX": 825.3333333333334,
|
||||
"scrollY": 470,
|
||||
"quick": false
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"expanded": true,
|
||||
"name": "公園 H用",
|
||||
"order": 39,
|
||||
"parentId": 13,
|
||||
"scrollX": 817.3333333333334,
|
||||
"scrollY": 510
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"expanded": true,
|
||||
"name": "ステージ H用",
|
||||
"order": 40,
|
||||
"parentId": 13,
|
||||
"scrollX": 793.7142857142857,
|
||||
"scrollY": 590.5714285714286
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"expanded": true,
|
||||
"name": "ラブホ H用",
|
||||
"order": 41,
|
||||
"parentId": 13,
|
||||
"scrollX": 787.7142857142857,
|
||||
"scrollY": 597.4285714285714
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"expanded": true,
|
||||
"name": "隣町トイレ H用",
|
||||
"order": 42,
|
||||
"parentId": 13,
|
||||
"scrollX": 787.7142857142857,
|
||||
"scrollY": 597.4285714285714
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"expanded": true,
|
||||
"name": "隣町",
|
||||
"order": 26,
|
||||
"parentId": 22,
|
||||
"scrollX": 801.4285714285713,
|
||||
"scrollY": 703.7142857142857
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"expanded": true,
|
||||
"name": "住宅街 H用",
|
||||
"order": 38,
|
||||
"parentId": 13,
|
||||
"scrollX": 706.5,
|
||||
"scrollY": 516.75
|
||||
},
|
||||
{
|
||||
"id": 22,
|
||||
"expanded": true,
|
||||
"name": "通常マップまとめ",
|
||||
"order": 12,
|
||||
"parentId": 0,
|
||||
"scrollX": 478.6666666666667,
|
||||
"scrollY": 459.3333333333333,
|
||||
"quick": false
|
||||
},
|
||||
{
|
||||
"id": 23,
|
||||
"expanded": true,
|
||||
"name": "平和 自室",
|
||||
"order": 6,
|
||||
"parentId": 24,
|
||||
"scrollX": 836,
|
||||
"scrollY": 586
|
||||
},
|
||||
{
|
||||
"id": 24,
|
||||
"expanded": false,
|
||||
"name": "平和な世界まとめ",
|
||||
"order": 5,
|
||||
"parentId": 0,
|
||||
"scrollX": 1061.142857142857,
|
||||
"scrollY": 604.2857142857142,
|
||||
"quick": false
|
||||
},
|
||||
{
|
||||
"id": 25,
|
||||
"expanded": true,
|
||||
"name": "平和 自宅前",
|
||||
"order": 7,
|
||||
"parentId": 24,
|
||||
"scrollX": 778.8,
|
||||
"scrollY": 418.2
|
||||
},
|
||||
{
|
||||
"id": 26,
|
||||
"expanded": false,
|
||||
"name": "回想部屋 絶対消すな",
|
||||
"order": 4,
|
||||
"parentId": 0,
|
||||
"scrollX": 516,
|
||||
"scrollY": 597.4285714285714,
|
||||
"quick": false
|
||||
},
|
||||
{
|
||||
"id": 27,
|
||||
"expanded": true,
|
||||
"name": "実験用マップ",
|
||||
"order": 1,
|
||||
"parentId": 0,
|
||||
"scrollX": 0,
|
||||
"scrollY": 0,
|
||||
"quick": false
|
||||
},
|
||||
{
|
||||
"id": 28,
|
||||
"expanded": true,
|
||||
"name": "トイレ(回想部屋あり)",
|
||||
"order": 20,
|
||||
"parentId": 22,
|
||||
"scrollX": 793.7142857142857,
|
||||
"scrollY": 590.5714285714286
|
||||
},
|
||||
{
|
||||
"id": 29,
|
||||
"expanded": true,
|
||||
"name": "平和 地元商店街",
|
||||
"order": 8,
|
||||
"parentId": 24,
|
||||
"scrollX": 793.7142857142857,
|
||||
"scrollY": 604.2857142857142
|
||||
},
|
||||
{
|
||||
"id": 30,
|
||||
"expanded": true,
|
||||
"name": "平和 学校",
|
||||
"order": 9,
|
||||
"parentId": 24,
|
||||
"scrollX": 807.4285714285713,
|
||||
"scrollY": 979.7142857142857
|
||||
},
|
||||
{
|
||||
"id": 31,
|
||||
"expanded": true,
|
||||
"name": "平和 廊下",
|
||||
"order": 10,
|
||||
"parentId": 24,
|
||||
"scrollX": 1368,
|
||||
"scrollY": 604.2857142857142
|
||||
},
|
||||
{
|
||||
"id": 32,
|
||||
"expanded": true,
|
||||
"name": "平和 屋上",
|
||||
"order": 11,
|
||||
"parentId": 24,
|
||||
"scrollX": 807.4285714285713,
|
||||
"scrollY": 590.5714285714286
|
||||
},
|
||||
{
|
||||
"id": 33,
|
||||
"expanded": true,
|
||||
"name": "学校 廊下",
|
||||
"order": 22,
|
||||
"parentId": 22,
|
||||
"scrollX": 1659.4285714285713,
|
||||
"scrollY": 604.2857142857142
|
||||
},
|
||||
{
|
||||
"id": 34,
|
||||
"expanded": true,
|
||||
"name": "通常 学校",
|
||||
"order": 23,
|
||||
"parentId": 22,
|
||||
"scrollX": 793.7142857142857,
|
||||
"scrollY": 979.7142857142857
|
||||
},
|
||||
{
|
||||
"id": 35,
|
||||
"expanded": true,
|
||||
"name": "鈴木宅",
|
||||
"order": 24,
|
||||
"parentId": 22,
|
||||
"scrollX": 801.4285714285713,
|
||||
"scrollY": 952.2857142857142
|
||||
},
|
||||
{
|
||||
"id": 36,
|
||||
"expanded": true,
|
||||
"name": "過去の自宅前",
|
||||
"order": 25,
|
||||
"parentId": 22,
|
||||
"scrollX": 807.4285714285713,
|
||||
"scrollY": 590.5714285714286
|
||||
},
|
||||
{
|
||||
"id": 37,
|
||||
"expanded": false,
|
||||
"name": "白い部屋",
|
||||
"order": 27,
|
||||
"parentId": 22,
|
||||
"scrollX": 792,
|
||||
"scrollY": 604.2857142857142,
|
||||
"quick": false
|
||||
},
|
||||
{
|
||||
"id": 38,
|
||||
"expanded": true,
|
||||
"name": "鈴木宅 中 エピ",
|
||||
"order": 29,
|
||||
"parentId": 15,
|
||||
"scrollX": 801.4285714285713,
|
||||
"scrollY": 583.7142857142857
|
||||
},
|
||||
{
|
||||
"id": 39,
|
||||
"expanded": false,
|
||||
"name": "病院 エピ",
|
||||
"order": 31,
|
||||
"parentId": 15,
|
||||
"scrollX": 478.6666666666667,
|
||||
"scrollY": 459.3333333333333,
|
||||
"quick": false
|
||||
},
|
||||
{
|
||||
"id": 40,
|
||||
"expanded": true,
|
||||
"name": "公園 エピ",
|
||||
"order": 30,
|
||||
"parentId": 15,
|
||||
"scrollX": 694.5,
|
||||
"scrollY": 516.75
|
||||
},
|
||||
{
|
||||
"id": 41,
|
||||
"expanded": true,
|
||||
"name": "ステージ エピ",
|
||||
"order": 33,
|
||||
"parentId": 15,
|
||||
"scrollX": 793.7142857142857,
|
||||
"scrollY": 590.5714285714286
|
||||
},
|
||||
{
|
||||
"id": 42,
|
||||
"expanded": true,
|
||||
"name": "ラブホ エピ",
|
||||
"order": 34,
|
||||
"parentId": 15,
|
||||
"scrollX": 694.5,
|
||||
"scrollY": 516.75
|
||||
},
|
||||
{
|
||||
"id": 43,
|
||||
"expanded": true,
|
||||
"name": "隣町トイレ ",
|
||||
"order": 35,
|
||||
"parentId": 15,
|
||||
"scrollX": 706.5,
|
||||
"scrollY": 516.75
|
||||
},
|
||||
{
|
||||
"id": 44,
|
||||
"expanded": false,
|
||||
"name": "予備 まとめ",
|
||||
"order": 43,
|
||||
"parentId": 0,
|
||||
"scrollX": 0,
|
||||
"scrollY": 0,
|
||||
"quick": false
|
||||
},
|
||||
{
|
||||
"id": 45,
|
||||
"expanded": false,
|
||||
"name": "回想部屋 製品版",
|
||||
"order": 46,
|
||||
"parentId": 44,
|
||||
"scrollX": 529.7142857142857,
|
||||
"scrollY": 604.2857142857142,
|
||||
"quick": false
|
||||
},
|
||||
{
|
||||
"id": 46,
|
||||
"expanded": true,
|
||||
"name": "暗い自室(回想部屋あり)",
|
||||
"order": 44,
|
||||
"parentId": 44,
|
||||
"scrollX": 793.7142857142857,
|
||||
"scrollY": 604.2857142857142
|
||||
},
|
||||
{
|
||||
"id": 47,
|
||||
"expanded": true,
|
||||
"name": "セーブ用マップ 製品版",
|
||||
"order": 45,
|
||||
"parentId": 44,
|
||||
"scrollX": 816,
|
||||
"scrollY": 640,
|
||||
"quick": false
|
||||
},
|
||||
{
|
||||
"id": 48,
|
||||
"expanded": true,
|
||||
"name": "セーブ用マップ 体験版",
|
||||
"order": 47,
|
||||
"parentId": 44,
|
||||
"scrollX": 1061.142857142857,
|
||||
"scrollY": 604.2857142857142,
|
||||
"quick": false
|
||||
},
|
||||
{
|
||||
"id": 49,
|
||||
"expanded": false,
|
||||
"name": "回想部屋 体験版",
|
||||
"order": 48,
|
||||
"parentId": 44,
|
||||
"scrollX": 1061.142857142857,
|
||||
"scrollY": 604.2857142857142,
|
||||
"quick": false
|
||||
}
|
||||
]
|
||||
7970
data/Skills.json
Normal file
7970
data/Skills.json
Normal file
File diff suppressed because it is too large
Load diff
980
data/States.json
Normal file
980
data/States.json
Normal file
|
|
@ -0,0 +1,980 @@
|
|||
[
|
||||
null,
|
||||
{
|
||||
"id": 1,
|
||||
"autoRemovalTiming": 0,
|
||||
"chanceByDamage": 100,
|
||||
"iconIndex": 1,
|
||||
"maxTurns": 1,
|
||||
"message1": "%1は倒れた!",
|
||||
"message2": "%1を倒した!",
|
||||
"message3": "",
|
||||
"message4": "%1は立ち上がった!",
|
||||
"minTurns": 1,
|
||||
"motion": 3,
|
||||
"name": "戦闘不能",
|
||||
"note": "ステート1番はHP0のときに付加されます。",
|
||||
"overlay": 0,
|
||||
"priority": 100,
|
||||
"releaseByDamage": false,
|
||||
"removeAtBattleEnd": false,
|
||||
"removeByDamage": false,
|
||||
"removeByRestriction": false,
|
||||
"removeByWalking": false,
|
||||
"restriction": 4,
|
||||
"stepsToRemove": 100,
|
||||
"traits": [
|
||||
{
|
||||
"code": 23,
|
||||
"dataId": 9,
|
||||
"value": 0
|
||||
}
|
||||
],
|
||||
"messageType": 1
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"autoRemovalTiming": 2,
|
||||
"chanceByDamage": 100,
|
||||
"iconIndex": 0,
|
||||
"maxTurns": 1,
|
||||
"message1": "",
|
||||
"message2": "",
|
||||
"message3": "",
|
||||
"message4": "",
|
||||
"minTurns": 1,
|
||||
"motion": 0,
|
||||
"name": "防御",
|
||||
"note": "",
|
||||
"overlay": 0,
|
||||
"priority": 0,
|
||||
"removeAtBattleEnd": true,
|
||||
"removeByDamage": false,
|
||||
"removeByRestriction": true,
|
||||
"removeByWalking": false,
|
||||
"restriction": 0,
|
||||
"stepsToRemove": 100,
|
||||
"traits": [
|
||||
{
|
||||
"code": 62,
|
||||
"dataId": 1,
|
||||
"value": 0
|
||||
}
|
||||
],
|
||||
"messageType": 1
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"autoRemovalTiming": 0,
|
||||
"chanceByDamage": 100,
|
||||
"iconIndex": 0,
|
||||
"maxTurns": 1,
|
||||
"message1": "",
|
||||
"message2": "",
|
||||
"message3": "",
|
||||
"message4": "",
|
||||
"minTurns": 1,
|
||||
"motion": 0,
|
||||
"name": "不死身",
|
||||
"note": "",
|
||||
"overlay": 0,
|
||||
"priority": 0,
|
||||
"removeAtBattleEnd": true,
|
||||
"removeByDamage": false,
|
||||
"removeByRestriction": false,
|
||||
"removeByWalking": false,
|
||||
"restriction": 0,
|
||||
"stepsToRemove": 100,
|
||||
"traits": [
|
||||
{
|
||||
"code": 14,
|
||||
"dataId": 1,
|
||||
"value": 0
|
||||
}
|
||||
],
|
||||
"messageType": 1
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"autoRemovalTiming": 0,
|
||||
"chanceByDamage": 100,
|
||||
"iconIndex": 2,
|
||||
"maxTurns": 1,
|
||||
"message1": "%1は毒にかかった!",
|
||||
"message2": "%1に毒をかけた!",
|
||||
"message3": "",
|
||||
"message4": "%1の毒が消えた!",
|
||||
"minTurns": 1,
|
||||
"motion": 1,
|
||||
"overlay": 1,
|
||||
"name": "毒",
|
||||
"note": "",
|
||||
"priority": 50,
|
||||
"releaseByDamage": false,
|
||||
"removeAtBattleEnd": false,
|
||||
"removeByDamage": false,
|
||||
"removeByRestriction": false,
|
||||
"removeByWalking": false,
|
||||
"restriction": 0,
|
||||
"stepsToRemove": 100,
|
||||
"traits": [
|
||||
{
|
||||
"code": 22,
|
||||
"dataId": 7,
|
||||
"value": -0.1
|
||||
}
|
||||
],
|
||||
"messageType": 1
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"autoRemovalTiming": 1,
|
||||
"chanceByDamage": 100,
|
||||
"iconIndex": 3,
|
||||
"maxTurns": 5,
|
||||
"message1": "%1は暗闇に閉ざされた!",
|
||||
"message2": "%1を暗闇に閉ざした!",
|
||||
"message3": "",
|
||||
"message4": "%1の暗闇が消えた!",
|
||||
"minTurns": 3,
|
||||
"motion": 1,
|
||||
"name": "暗闇",
|
||||
"note": "",
|
||||
"overlay": 2,
|
||||
"priority": 60,
|
||||
"releaseByDamage": false,
|
||||
"removeAtBattleEnd": true,
|
||||
"removeByDamage": false,
|
||||
"removeByRestriction": false,
|
||||
"removeByWalking": false,
|
||||
"restriction": 0,
|
||||
"stepsToRemove": 100,
|
||||
"traits": [
|
||||
{
|
||||
"code": 22,
|
||||
"dataId": 0,
|
||||
"value": -0.5
|
||||
}
|
||||
],
|
||||
"messageType": 1
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"autoRemovalTiming": 1,
|
||||
"chanceByDamage": 100,
|
||||
"iconIndex": 4,
|
||||
"maxTurns": 5,
|
||||
"message1": "%1は沈黙した!",
|
||||
"message2": "%1を沈黙させた!",
|
||||
"message3": "",
|
||||
"message4": "%1の沈黙が解けた!",
|
||||
"minTurns": 3,
|
||||
"motion": 1,
|
||||
"name": "沈黙",
|
||||
"note": "",
|
||||
"overlay": 3,
|
||||
"priority": 65,
|
||||
"releaseByDamage": false,
|
||||
"removeAtBattleEnd": true,
|
||||
"removeByDamage": false,
|
||||
"removeByRestriction": false,
|
||||
"removeByWalking": false,
|
||||
"restriction": 0,
|
||||
"stepsToRemove": 100,
|
||||
"traits": [
|
||||
{
|
||||
"code": 42,
|
||||
"dataId": 1,
|
||||
"value": 0
|
||||
}
|
||||
],
|
||||
"messageType": 1
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"autoRemovalTiming": 1,
|
||||
"chanceByDamage": 50,
|
||||
"iconIndex": 5,
|
||||
"maxTurns": 4,
|
||||
"message1": "%1は激昂した!",
|
||||
"message2": "%1を激昂させた!",
|
||||
"message3": "",
|
||||
"message4": "%1は我に返った!",
|
||||
"minTurns": 2,
|
||||
"motion": 1,
|
||||
"name": "激昂",
|
||||
"note": "",
|
||||
"overlay": 4,
|
||||
"priority": 70,
|
||||
"releaseByDamage": false,
|
||||
"removeAtBattleEnd": true,
|
||||
"removeByDamage": true,
|
||||
"removeByRestriction": false,
|
||||
"removeByWalking": false,
|
||||
"restriction": 1,
|
||||
"stepsToRemove": 100,
|
||||
"traits": [],
|
||||
"messageType": 1
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"autoRemovalTiming": 1,
|
||||
"chanceByDamage": 50,
|
||||
"iconIndex": 6,
|
||||
"maxTurns": 4,
|
||||
"message1": "%1は混乱した!",
|
||||
"message2": "%1を混乱させた!",
|
||||
"message3": "",
|
||||
"message4": "%1は我に返った!",
|
||||
"minTurns": 2,
|
||||
"motion": 1,
|
||||
"name": "混乱",
|
||||
"note": "",
|
||||
"overlay": 5,
|
||||
"priority": 75,
|
||||
"releaseByDamage": false,
|
||||
"removeAtBattleEnd": true,
|
||||
"removeByDamage": true,
|
||||
"removeByRestriction": false,
|
||||
"removeByWalking": false,
|
||||
"restriction": 2,
|
||||
"stepsToRemove": 100,
|
||||
"traits": [],
|
||||
"messageType": 1
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"autoRemovalTiming": 1,
|
||||
"chanceByDamage": 50,
|
||||
"iconIndex": 7,
|
||||
"maxTurns": 4,
|
||||
"message1": "%1は魅了された!",
|
||||
"message2": "%1を魅了した!",
|
||||
"message3": "",
|
||||
"message4": "%1は我に返った!",
|
||||
"minTurns": 2,
|
||||
"motion": 1,
|
||||
"name": "魅了",
|
||||
"note": "",
|
||||
"overlay": 6,
|
||||
"priority": 80,
|
||||
"releaseByDamage": false,
|
||||
"removeAtBattleEnd": true,
|
||||
"removeByDamage": true,
|
||||
"removeByRestriction": false,
|
||||
"removeByWalking": false,
|
||||
"restriction": 3,
|
||||
"stepsToRemove": 100,
|
||||
"traits": [],
|
||||
"messageType": 1
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"autoRemovalTiming": 1,
|
||||
"chanceByDamage": 100,
|
||||
"iconIndex": 8,
|
||||
"maxTurns": 5,
|
||||
"message1": "%1は眠った!",
|
||||
"message2": "%1を眠らせた!",
|
||||
"message3": "%1は眠っている。",
|
||||
"message4": "%1は目を覚ました!",
|
||||
"minTurns": 3,
|
||||
"motion": 2,
|
||||
"name": "睡眠",
|
||||
"note": "",
|
||||
"overlay": 7,
|
||||
"priority": 90,
|
||||
"releaseByDamage": true,
|
||||
"removeAtBattleEnd": true,
|
||||
"removeByDamage": true,
|
||||
"removeByRestriction": false,
|
||||
"removeByWalking": false,
|
||||
"restriction": 4,
|
||||
"stepsToRemove": 100,
|
||||
"traits": [
|
||||
{
|
||||
"code": 22,
|
||||
"dataId": 1,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
"messageType": 1
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"autoRemovalTiming": 0,
|
||||
"chanceByDamage": 100,
|
||||
"traits": [],
|
||||
"iconIndex": 0,
|
||||
"maxTurns": 1,
|
||||
"message1": "",
|
||||
"message2": "",
|
||||
"message3": "",
|
||||
"message4": "",
|
||||
"minTurns": 1,
|
||||
"motion": 0,
|
||||
"name": "",
|
||||
"note": "",
|
||||
"overlay": 0,
|
||||
"priority": 50,
|
||||
"removeAtBattleEnd": false,
|
||||
"removeByDamage": false,
|
||||
"removeByRestriction": false,
|
||||
"removeByWalking": false,
|
||||
"restriction": 0,
|
||||
"stepsToRemove": 100,
|
||||
"messageType": 1
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"autoRemovalTiming": 2,
|
||||
"chanceByDamage": 100,
|
||||
"traits": [
|
||||
{
|
||||
"code": 22,
|
||||
"dataId": 1,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
"iconIndex": 9,
|
||||
"maxTurns": 3,
|
||||
"message1": "%1はしびれて動けなくなった!",
|
||||
"message2": "%1を麻痺させた!",
|
||||
"message3": "%1は体がしびれて動けない!",
|
||||
"message4": "%1の麻痺が解けた!",
|
||||
"minTurns": 3,
|
||||
"motion": 2,
|
||||
"name": "麻痺",
|
||||
"note": "",
|
||||
"overlay": 8,
|
||||
"priority": 95,
|
||||
"removeAtBattleEnd": true,
|
||||
"removeByDamage": false,
|
||||
"removeByRestriction": false,
|
||||
"removeByWalking": false,
|
||||
"restriction": 4,
|
||||
"stepsToRemove": 100,
|
||||
"messageType": 1
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"autoRemovalTiming": 2,
|
||||
"chanceByDamage": 100,
|
||||
"traits": [
|
||||
{
|
||||
"code": 22,
|
||||
"dataId": 1,
|
||||
"value": -1
|
||||
}
|
||||
],
|
||||
"iconIndex": 9,
|
||||
"maxTurns": 2,
|
||||
"message1": "%1はバランスを崩した!",
|
||||
"message2": "%1はバランスを崩した!",
|
||||
"message3": "%1はバランスを崩している……",
|
||||
"message4": "%1は体勢を立て直した!",
|
||||
"minTurns": 1,
|
||||
"motion": 1,
|
||||
"name": "スタン",
|
||||
"note": "",
|
||||
"overlay": 10,
|
||||
"priority": 90,
|
||||
"removeAtBattleEnd": true,
|
||||
"removeByDamage": false,
|
||||
"removeByRestriction": false,
|
||||
"removeByWalking": false,
|
||||
"restriction": 4,
|
||||
"stepsToRemove": 100,
|
||||
"messageType": 1
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"autoRemovalTiming": 0,
|
||||
"chanceByDamage": 100,
|
||||
"traits": [],
|
||||
"iconIndex": 0,
|
||||
"maxTurns": 1,
|
||||
"message1": "",
|
||||
"message2": "",
|
||||
"message3": "",
|
||||
"message4": "",
|
||||
"minTurns": 1,
|
||||
"motion": 0,
|
||||
"name": "",
|
||||
"note": "",
|
||||
"overlay": 0,
|
||||
"priority": 50,
|
||||
"removeAtBattleEnd": false,
|
||||
"removeByDamage": false,
|
||||
"removeByRestriction": false,
|
||||
"removeByWalking": false,
|
||||
"restriction": 0,
|
||||
"stepsToRemove": 100,
|
||||
"messageType": 1
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"autoRemovalTiming": 2,
|
||||
"chanceByDamage": 100,
|
||||
"traits": [
|
||||
{
|
||||
"code": 22,
|
||||
"dataId": 7,
|
||||
"value": 0.1
|
||||
}
|
||||
],
|
||||
"iconIndex": 72,
|
||||
"maxTurns": 4,
|
||||
"message1": "",
|
||||
"message2": "",
|
||||
"message3": "",
|
||||
"message4": "",
|
||||
"minTurns": 4,
|
||||
"motion": 0,
|
||||
"name": "HP再生",
|
||||
"note": "",
|
||||
"overlay": 0,
|
||||
"priority": 40,
|
||||
"removeAtBattleEnd": true,
|
||||
"removeByDamage": false,
|
||||
"removeByRestriction": false,
|
||||
"removeByWalking": false,
|
||||
"restriction": 0,
|
||||
"stepsToRemove": 100,
|
||||
"messageType": 1
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"autoRemovalTiming": 2,
|
||||
"chanceByDamage": 100,
|
||||
"traits": [
|
||||
{
|
||||
"code": 22,
|
||||
"dataId": 8,
|
||||
"value": 0.1
|
||||
}
|
||||
],
|
||||
"iconIndex": 72,
|
||||
"maxTurns": 4,
|
||||
"message1": "",
|
||||
"message2": "",
|
||||
"message3": "",
|
||||
"message4": "",
|
||||
"minTurns": 4,
|
||||
"motion": 0,
|
||||
"name": "MP再生",
|
||||
"note": "",
|
||||
"overlay": 0,
|
||||
"priority": 40,
|
||||
"removeAtBattleEnd": true,
|
||||
"removeByDamage": false,
|
||||
"removeByRestriction": false,
|
||||
"removeByWalking": false,
|
||||
"restriction": 0,
|
||||
"stepsToRemove": 100,
|
||||
"messageType": 1
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"autoRemovalTiming": 2,
|
||||
"chanceByDamage": 100,
|
||||
"traits": [
|
||||
{
|
||||
"code": 22,
|
||||
"dataId": 9,
|
||||
"value": 0.1
|
||||
}
|
||||
],
|
||||
"iconIndex": 72,
|
||||
"maxTurns": 4,
|
||||
"message1": "",
|
||||
"message2": "",
|
||||
"message3": "",
|
||||
"message4": "",
|
||||
"minTurns": 4,
|
||||
"motion": 0,
|
||||
"name": "TP再生",
|
||||
"note": "",
|
||||
"overlay": 0,
|
||||
"priority": 40,
|
||||
"removeAtBattleEnd": true,
|
||||
"removeByDamage": false,
|
||||
"removeByRestriction": false,
|
||||
"removeByWalking": false,
|
||||
"restriction": 0,
|
||||
"stepsToRemove": 100,
|
||||
"messageType": 1
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"autoRemovalTiming": 2,
|
||||
"chanceByDamage": 100,
|
||||
"traits": [
|
||||
{
|
||||
"code": 22,
|
||||
"dataId": 5,
|
||||
"value": 1
|
||||
}
|
||||
],
|
||||
"iconIndex": 70,
|
||||
"maxTurns": 5,
|
||||
"message1": "",
|
||||
"message2": "",
|
||||
"message3": "",
|
||||
"message4": "",
|
||||
"minTurns": 5,
|
||||
"motion": 0,
|
||||
"name": "魔法反射",
|
||||
"note": "",
|
||||
"overlay": 0,
|
||||
"priority": 40,
|
||||
"removeAtBattleEnd": true,
|
||||
"removeByDamage": false,
|
||||
"removeByRestriction": false,
|
||||
"removeByWalking": false,
|
||||
"restriction": 0,
|
||||
"stepsToRemove": 100,
|
||||
"messageType": 1
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"autoRemovalTiming": 2,
|
||||
"chanceByDamage": 100,
|
||||
"traits": [
|
||||
{
|
||||
"code": 62,
|
||||
"dataId": 2,
|
||||
"value": 1
|
||||
}
|
||||
],
|
||||
"iconIndex": 81,
|
||||
"maxTurns": 1,
|
||||
"message1": "",
|
||||
"message2": "",
|
||||
"message3": "",
|
||||
"message4": "",
|
||||
"minTurns": 1,
|
||||
"motion": 0,
|
||||
"name": "かばう",
|
||||
"note": "",
|
||||
"overlay": 0,
|
||||
"priority": 40,
|
||||
"removeAtBattleEnd": true,
|
||||
"removeByDamage": false,
|
||||
"removeByRestriction": true,
|
||||
"removeByWalking": false,
|
||||
"restriction": 0,
|
||||
"stepsToRemove": 100,
|
||||
"messageType": 1
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"autoRemovalTiming": 2,
|
||||
"chanceByDamage": 100,
|
||||
"traits": [
|
||||
{
|
||||
"code": 23,
|
||||
"dataId": 0,
|
||||
"value": 9
|
||||
}
|
||||
],
|
||||
"iconIndex": 76,
|
||||
"maxTurns": 5,
|
||||
"message1": "%1は狙われやすくなった!",
|
||||
"message2": "",
|
||||
"message3": "",
|
||||
"message4": "",
|
||||
"minTurns": 5,
|
||||
"motion": 0,
|
||||
"name": "挑発",
|
||||
"note": "",
|
||||
"overlay": 0,
|
||||
"priority": 40,
|
||||
"removeAtBattleEnd": true,
|
||||
"removeByDamage": false,
|
||||
"removeByRestriction": false,
|
||||
"removeByWalking": false,
|
||||
"restriction": 0,
|
||||
"stepsToRemove": 100,
|
||||
"messageType": 1
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"autoRemovalTiming": 2,
|
||||
"chanceByDamage": 100,
|
||||
"traits": [
|
||||
{
|
||||
"code": 23,
|
||||
"dataId": 0,
|
||||
"value": 0
|
||||
}
|
||||
],
|
||||
"iconIndex": 81,
|
||||
"maxTurns": 5,
|
||||
"message1": "%1は狙われにくくなった!",
|
||||
"message2": "",
|
||||
"message3": "",
|
||||
"message4": "",
|
||||
"minTurns": 5,
|
||||
"motion": 0,
|
||||
"name": "隠れる",
|
||||
"note": "",
|
||||
"overlay": 0,
|
||||
"priority": 40,
|
||||
"removeAtBattleEnd": true,
|
||||
"removeByDamage": false,
|
||||
"removeByRestriction": false,
|
||||
"removeByWalking": false,
|
||||
"restriction": 0,
|
||||
"stepsToRemove": 100,
|
||||
"messageType": 1
|
||||
},
|
||||
{
|
||||
"id": 22,
|
||||
"autoRemovalTiming": 1,
|
||||
"chanceByDamage": 100,
|
||||
"traits": [
|
||||
{
|
||||
"code": 22,
|
||||
"dataId": 6,
|
||||
"value": 1
|
||||
}
|
||||
],
|
||||
"iconIndex": 77,
|
||||
"maxTurns": 3,
|
||||
"message1": "",
|
||||
"message2": "",
|
||||
"message3": "",
|
||||
"message4": "",
|
||||
"minTurns": 3,
|
||||
"motion": 0,
|
||||
"name": "反撃",
|
||||
"note": "",
|
||||
"overlay": 0,
|
||||
"priority": 50,
|
||||
"removeAtBattleEnd": true,
|
||||
"removeByDamage": false,
|
||||
"removeByRestriction": true,
|
||||
"removeByWalking": false,
|
||||
"restriction": 0,
|
||||
"stepsToRemove": 100,
|
||||
"messageType": 1
|
||||
},
|
||||
{
|
||||
"id": 23,
|
||||
"autoRemovalTiming": 2,
|
||||
"chanceByDamage": 100,
|
||||
"traits": [
|
||||
{
|
||||
"code": 14,
|
||||
"dataId": 4,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"code": 14,
|
||||
"dataId": 5,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"code": 14,
|
||||
"dataId": 6,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"code": 14,
|
||||
"dataId": 7,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"code": 14,
|
||||
"dataId": 8,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"code": 14,
|
||||
"dataId": 9,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"code": 14,
|
||||
"dataId": 10,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"code": 14,
|
||||
"dataId": 12,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"code": 14,
|
||||
"dataId": 13,
|
||||
"value": 1
|
||||
}
|
||||
],
|
||||
"iconIndex": 70,
|
||||
"maxTurns": 5,
|
||||
"message1": "",
|
||||
"message2": "",
|
||||
"message3": "",
|
||||
"message4": "",
|
||||
"minTurns": 5,
|
||||
"motion": 0,
|
||||
"name": "状態異常防止",
|
||||
"note": "",
|
||||
"overlay": 0,
|
||||
"priority": 50,
|
||||
"removeAtBattleEnd": true,
|
||||
"removeByDamage": false,
|
||||
"removeByRestriction": false,
|
||||
"removeByWalking": false,
|
||||
"restriction": 0,
|
||||
"stepsToRemove": 100,
|
||||
"messageType": 1
|
||||
},
|
||||
{
|
||||
"id": 24,
|
||||
"autoRemovalTiming": 2,
|
||||
"chanceByDamage": 100,
|
||||
"traits": [
|
||||
{
|
||||
"code": 23,
|
||||
"dataId": 4,
|
||||
"value": 0.25
|
||||
}
|
||||
],
|
||||
"iconIndex": 70,
|
||||
"maxTurns": 5,
|
||||
"message1": "",
|
||||
"message2": "",
|
||||
"message3": "",
|
||||
"message4": "",
|
||||
"minTurns": 5,
|
||||
"motion": 0,
|
||||
"name": "消費MP減",
|
||||
"note": "",
|
||||
"overlay": 0,
|
||||
"priority": 50,
|
||||
"removeAtBattleEnd": true,
|
||||
"removeByDamage": false,
|
||||
"removeByRestriction": false,
|
||||
"removeByWalking": false,
|
||||
"restriction": 0,
|
||||
"stepsToRemove": 100,
|
||||
"messageType": 1
|
||||
},
|
||||
{
|
||||
"id": 25,
|
||||
"autoRemovalTiming": 2,
|
||||
"chanceByDamage": 100,
|
||||
"traits": [
|
||||
{
|
||||
"code": 31,
|
||||
"dataId": 2,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"code": 11,
|
||||
"dataId": 2,
|
||||
"value": 0.5
|
||||
},
|
||||
{
|
||||
"code": 21,
|
||||
"dataId": 2,
|
||||
"value": 1.1
|
||||
}
|
||||
],
|
||||
"iconIndex": 64,
|
||||
"maxTurns": 5,
|
||||
"message1": "%1は炎の力を身にまとった。",
|
||||
"message2": "%1は炎の力を身にまとった。",
|
||||
"message3": "",
|
||||
"message4": "",
|
||||
"minTurns": 5,
|
||||
"motion": 0,
|
||||
"name": "炎の力",
|
||||
"note": "",
|
||||
"overlay": 0,
|
||||
"priority": 50,
|
||||
"removeAtBattleEnd": true,
|
||||
"removeByDamage": false,
|
||||
"removeByRestriction": false,
|
||||
"removeByWalking": false,
|
||||
"restriction": 0,
|
||||
"stepsToRemove": 100,
|
||||
"messageType": 1
|
||||
},
|
||||
{
|
||||
"id": 26,
|
||||
"autoRemovalTiming": 2,
|
||||
"chanceByDamage": 100,
|
||||
"traits": [
|
||||
{
|
||||
"code": 31,
|
||||
"dataId": 3,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"code": 11,
|
||||
"dataId": 3,
|
||||
"value": 0.5
|
||||
},
|
||||
{
|
||||
"code": 21,
|
||||
"dataId": 2,
|
||||
"value": 1.1
|
||||
}
|
||||
],
|
||||
"iconIndex": 65,
|
||||
"maxTurns": 5,
|
||||
"message1": "%1は氷の力を身にまとった。",
|
||||
"message2": "%1は氷の力を身にまとった。",
|
||||
"message3": "",
|
||||
"message4": "",
|
||||
"minTurns": 5,
|
||||
"motion": 0,
|
||||
"name": "氷の力",
|
||||
"note": "",
|
||||
"overlay": 0,
|
||||
"priority": 50,
|
||||
"removeAtBattleEnd": true,
|
||||
"removeByDamage": false,
|
||||
"removeByRestriction": false,
|
||||
"removeByWalking": false,
|
||||
"restriction": 0,
|
||||
"stepsToRemove": 100,
|
||||
"messageType": 1
|
||||
},
|
||||
{
|
||||
"id": 27,
|
||||
"autoRemovalTiming": 2,
|
||||
"chanceByDamage": 100,
|
||||
"traits": [
|
||||
{
|
||||
"code": 31,
|
||||
"dataId": 4,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"code": 11,
|
||||
"dataId": 4,
|
||||
"value": 0.5
|
||||
},
|
||||
{
|
||||
"code": 21,
|
||||
"dataId": 2,
|
||||
"value": 1.1
|
||||
}
|
||||
],
|
||||
"iconIndex": 66,
|
||||
"maxTurns": 5,
|
||||
"message1": "%1は雷の力を身にまとった。",
|
||||
"message2": "%1は雷の力を身にまとった。",
|
||||
"message3": "",
|
||||
"message4": "",
|
||||
"minTurns": 5,
|
||||
"motion": 0,
|
||||
"name": "雷の力",
|
||||
"note": "",
|
||||
"overlay": 0,
|
||||
"priority": 50,
|
||||
"removeAtBattleEnd": true,
|
||||
"removeByDamage": false,
|
||||
"removeByRestriction": false,
|
||||
"removeByWalking": false,
|
||||
"restriction": 0,
|
||||
"stepsToRemove": 100,
|
||||
"messageType": 1
|
||||
},
|
||||
{
|
||||
"id": 28,
|
||||
"autoRemovalTiming": 0,
|
||||
"chanceByDamage": 100,
|
||||
"traits": [],
|
||||
"iconIndex": 0,
|
||||
"maxTurns": 1,
|
||||
"message1": "",
|
||||
"message2": "",
|
||||
"message3": "",
|
||||
"message4": "",
|
||||
"minTurns": 1,
|
||||
"motion": 0,
|
||||
"name": "",
|
||||
"note": "",
|
||||
"overlay": 0,
|
||||
"priority": 50,
|
||||
"removeAtBattleEnd": false,
|
||||
"removeByDamage": false,
|
||||
"removeByRestriction": false,
|
||||
"removeByWalking": false,
|
||||
"restriction": 0,
|
||||
"stepsToRemove": 100,
|
||||
"messageType": 1
|
||||
},
|
||||
{
|
||||
"id": 29,
|
||||
"autoRemovalTiming": 0,
|
||||
"chanceByDamage": 100,
|
||||
"traits": [
|
||||
{
|
||||
"code": 64,
|
||||
"dataId": 0,
|
||||
"value": 1
|
||||
}
|
||||
],
|
||||
"iconIndex": 72,
|
||||
"maxTurns": 1,
|
||||
"message1": "",
|
||||
"message2": "",
|
||||
"message3": "",
|
||||
"message4": "",
|
||||
"minTurns": 1,
|
||||
"motion": 0,
|
||||
"name": "エンカウント半減",
|
||||
"note": "",
|
||||
"overlay": 0,
|
||||
"priority": 20,
|
||||
"removeAtBattleEnd": false,
|
||||
"removeByDamage": false,
|
||||
"removeByRestriction": false,
|
||||
"removeByWalking": true,
|
||||
"restriction": 0,
|
||||
"stepsToRemove": 100,
|
||||
"messageType": 1
|
||||
},
|
||||
{
|
||||
"id": 30,
|
||||
"autoRemovalTiming": 0,
|
||||
"chanceByDamage": 100,
|
||||
"traits": [
|
||||
{
|
||||
"code": 64,
|
||||
"dataId": 4,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"code": 64,
|
||||
"dataId": 5,
|
||||
"value": 1
|
||||
}
|
||||
],
|
||||
"iconIndex": 70,
|
||||
"maxTurns": 1,
|
||||
"message1": "",
|
||||
"message2": "",
|
||||
"message3": "",
|
||||
"message4": "",
|
||||
"minTurns": 1,
|
||||
"motion": 0,
|
||||
"name": "賞金・アイテム2倍",
|
||||
"note": "",
|
||||
"overlay": 0,
|
||||
"priority": 20,
|
||||
"removeAtBattleEnd": false,
|
||||
"removeByDamage": false,
|
||||
"removeByRestriction": false,
|
||||
"removeByWalking": true,
|
||||
"restriction": 0,
|
||||
"stepsToRemove": 100,
|
||||
"messageType": 1
|
||||
}
|
||||
]
|
||||
676
data/System.json
Normal file
676
data/System.json
Normal file
|
|
@ -0,0 +1,676 @@
|
|||
{
|
||||
"advanced": {
|
||||
"gameId": 96063807,
|
||||
"screenWidth": 1280,
|
||||
"screenHeight": 720,
|
||||
"uiAreaWidth": 1280,
|
||||
"uiAreaHeight": 720,
|
||||
"numberFontFilename": "mplus-2p-bold-sub.woff",
|
||||
"fallbackFonts": "Verdana, sans-serif",
|
||||
"fontSize": 26,
|
||||
"mainFontFilename": "mplus-1m-regular.woff",
|
||||
"screenScale": 1,
|
||||
"windowOpacity": 192
|
||||
},
|
||||
"airship": {
|
||||
"bgm": {
|
||||
"name": "Ship3",
|
||||
"pan": 0,
|
||||
"pitch": 100,
|
||||
"volume": 90
|
||||
},
|
||||
"characterIndex": 3,
|
||||
"characterName": "Vehicle",
|
||||
"startMapId": 0,
|
||||
"startX": 0,
|
||||
"startY": 0
|
||||
},
|
||||
"armorTypes": [
|
||||
"",
|
||||
"一般防具",
|
||||
"魔法防具",
|
||||
"軽装防具",
|
||||
"重装防具",
|
||||
"小型盾",
|
||||
"大型盾"
|
||||
],
|
||||
"attackMotions": [
|
||||
{
|
||||
"type": 0,
|
||||
"weaponImageId": 0
|
||||
},
|
||||
{
|
||||
"type": 1,
|
||||
"weaponImageId": 1
|
||||
},
|
||||
{
|
||||
"type": 1,
|
||||
"weaponImageId": 2
|
||||
},
|
||||
{
|
||||
"type": 1,
|
||||
"weaponImageId": 3
|
||||
},
|
||||
{
|
||||
"type": 1,
|
||||
"weaponImageId": 4
|
||||
},
|
||||
{
|
||||
"type": 1,
|
||||
"weaponImageId": 5
|
||||
},
|
||||
{
|
||||
"type": 1,
|
||||
"weaponImageId": 6
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"weaponImageId": 7
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"weaponImageId": 8
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"weaponImageId": 9
|
||||
},
|
||||
{
|
||||
"type": 0,
|
||||
"weaponImageId": 10
|
||||
},
|
||||
{
|
||||
"type": 0,
|
||||
"weaponImageId": 11
|
||||
},
|
||||
{
|
||||
"type": 0,
|
||||
"weaponImageId": 12
|
||||
}
|
||||
],
|
||||
"battleBgm": {
|
||||
"name": "Battle1",
|
||||
"pan": 0,
|
||||
"pitch": 100,
|
||||
"volume": 90
|
||||
},
|
||||
"battleback1Name": "GrassMaze",
|
||||
"battleback2Name": "GrassMaze",
|
||||
"battlerHue": 0,
|
||||
"battlerName": "Hi_monster",
|
||||
"battleSystem": 0,
|
||||
"boat": {
|
||||
"bgm": {
|
||||
"name": "Ship1",
|
||||
"pan": 0,
|
||||
"pitch": 100,
|
||||
"volume": 90
|
||||
},
|
||||
"characterIndex": 0,
|
||||
"characterName": "Vehicle",
|
||||
"startMapId": 0,
|
||||
"startX": 0,
|
||||
"startY": 0
|
||||
},
|
||||
"currencyUnit": "G",
|
||||
"defeatMe": {
|
||||
"name": "Defeat1",
|
||||
"pan": 0,
|
||||
"pitch": 100,
|
||||
"volume": 90
|
||||
},
|
||||
"editMapId": 19,
|
||||
"elements": [
|
||||
"",
|
||||
"物理",
|
||||
"炎",
|
||||
"氷",
|
||||
"雷",
|
||||
"水",
|
||||
"土",
|
||||
"風",
|
||||
"光",
|
||||
"闇"
|
||||
],
|
||||
"equipTypes": [
|
||||
"",
|
||||
"武器",
|
||||
"盾",
|
||||
"頭",
|
||||
"身体",
|
||||
"装飾品"
|
||||
],
|
||||
"gameTitle": "~王子様・外伝~雌豚王子は何処まで落ちる",
|
||||
"gameoverMe": {
|
||||
"name": "Gameover1",
|
||||
"pan": 0,
|
||||
"pitch": 100,
|
||||
"volume": 90
|
||||
},
|
||||
"itemCategories": [
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
true
|
||||
],
|
||||
"locale": "ja_JP",
|
||||
"magicSkills": [
|
||||
1
|
||||
],
|
||||
"menuCommands": [
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
true
|
||||
],
|
||||
"optAutosave": false,
|
||||
"optDisplayTp": true,
|
||||
"optDrawTitle": false,
|
||||
"optExtraExp": false,
|
||||
"optFloorDeath": false,
|
||||
"optFollowers": true,
|
||||
"optKeyItemsNumber": false,
|
||||
"optSideView": false,
|
||||
"optSlipDeath": false,
|
||||
"optTransparent": true,
|
||||
"partyMembers": [
|
||||
1
|
||||
],
|
||||
"ship": {
|
||||
"bgm": {
|
||||
"name": "Ship2",
|
||||
"pan": 0,
|
||||
"pitch": 100,
|
||||
"volume": 90
|
||||
},
|
||||
"characterIndex": 1,
|
||||
"characterName": "Vehicle",
|
||||
"startMapId": 0,
|
||||
"startX": 0,
|
||||
"startY": 0
|
||||
},
|
||||
"skillTypes": [
|
||||
"",
|
||||
"魔法",
|
||||
"必殺技"
|
||||
],
|
||||
"sounds": [
|
||||
{
|
||||
"name": "Cursor3",
|
||||
"pan": 0,
|
||||
"pitch": 100,
|
||||
"volume": 90
|
||||
},
|
||||
{
|
||||
"name": "Decision2",
|
||||
"pan": 0,
|
||||
"pitch": 100,
|
||||
"volume": 90
|
||||
},
|
||||
{
|
||||
"name": "Cancel2",
|
||||
"pan": 0,
|
||||
"pitch": 100,
|
||||
"volume": 90
|
||||
},
|
||||
{
|
||||
"name": "Buzzer1",
|
||||
"pan": 0,
|
||||
"pitch": 100,
|
||||
"volume": 90
|
||||
},
|
||||
{
|
||||
"name": "Equip1",
|
||||
"pan": 0,
|
||||
"pitch": 100,
|
||||
"volume": 90
|
||||
},
|
||||
{
|
||||
"name": "Save2",
|
||||
"pan": 0,
|
||||
"pitch": 100,
|
||||
"volume": 90
|
||||
},
|
||||
{
|
||||
"name": "Load2",
|
||||
"pan": 0,
|
||||
"pitch": 100,
|
||||
"volume": 90
|
||||
},
|
||||
{
|
||||
"name": "Battle1",
|
||||
"pan": 0,
|
||||
"pitch": 100,
|
||||
"volume": 90
|
||||
},
|
||||
{
|
||||
"name": "Run",
|
||||
"pan": 0,
|
||||
"pitch": 100,
|
||||
"volume": 90
|
||||
},
|
||||
{
|
||||
"name": "Attack3",
|
||||
"pan": 0,
|
||||
"pitch": 100,
|
||||
"volume": 90
|
||||
},
|
||||
{
|
||||
"name": "Damage4",
|
||||
"pan": 0,
|
||||
"pitch": 100,
|
||||
"volume": 90
|
||||
},
|
||||
{
|
||||
"name": "Collapse1",
|
||||
"pan": 0,
|
||||
"pitch": 100,
|
||||
"volume": 90
|
||||
},
|
||||
{
|
||||
"name": "Collapse2",
|
||||
"pan": 0,
|
||||
"pitch": 100,
|
||||
"volume": 90
|
||||
},
|
||||
{
|
||||
"name": "Collapse3",
|
||||
"pan": 0,
|
||||
"pitch": 100,
|
||||
"volume": 90
|
||||
},
|
||||
{
|
||||
"name": "Damage5",
|
||||
"pan": 0,
|
||||
"pitch": 100,
|
||||
"volume": 90
|
||||
},
|
||||
{
|
||||
"name": "Collapse4",
|
||||
"pan": 0,
|
||||
"pitch": 100,
|
||||
"volume": 90
|
||||
},
|
||||
{
|
||||
"name": "Recovery",
|
||||
"pan": 0,
|
||||
"pitch": 100,
|
||||
"volume": 90
|
||||
},
|
||||
{
|
||||
"name": "Miss",
|
||||
"pan": 0,
|
||||
"pitch": 100,
|
||||
"volume": 90
|
||||
},
|
||||
{
|
||||
"name": "Evasion1",
|
||||
"pan": 0,
|
||||
"pitch": 100,
|
||||
"volume": 90
|
||||
},
|
||||
{
|
||||
"name": "Evasion2",
|
||||
"pan": 0,
|
||||
"pitch": 100,
|
||||
"volume": 90
|
||||
},
|
||||
{
|
||||
"name": "Reflection",
|
||||
"pan": 0,
|
||||
"pitch": 100,
|
||||
"volume": 90
|
||||
},
|
||||
{
|
||||
"name": "Shop1",
|
||||
"pan": 0,
|
||||
"pitch": 100,
|
||||
"volume": 90
|
||||
},
|
||||
{
|
||||
"name": "Item3",
|
||||
"pan": 0,
|
||||
"pitch": 100,
|
||||
"volume": 90
|
||||
},
|
||||
{
|
||||
"name": "Item3",
|
||||
"pan": 0,
|
||||
"pitch": 100,
|
||||
"volume": 90
|
||||
}
|
||||
],
|
||||
"startMapId": 11,
|
||||
"startX": 8,
|
||||
"startY": 6,
|
||||
"switches": [
|
||||
"",
|
||||
"冒頭ストーリー開始",
|
||||
"回想 女視点",
|
||||
"回想 男視点",
|
||||
"ゴミスイッチ1",
|
||||
"ゴミスイッチ2",
|
||||
"ゴミスイッチ3",
|
||||
"ゴミスイッチ4",
|
||||
"ミニゲームスタート",
|
||||
"",
|
||||
"シーン1スイッチ",
|
||||
"イベント中",
|
||||
"中盤スイッチ",
|
||||
"終盤スイッチ",
|
||||
"倉庫スイッチ1",
|
||||
"倉庫スイッチ2",
|
||||
"倉庫スイッチ3",
|
||||
"倉庫終了スイッチ1",
|
||||
"倉庫終了スイッチ2",
|
||||
"倉庫終了スイッチ3",
|
||||
"最終イベント",
|
||||
"最終イベント前",
|
||||
"ED",
|
||||
"メッセ終了",
|
||||
"回想1",
|
||||
"回想2",
|
||||
"回想3",
|
||||
"回想4",
|
||||
"回想5",
|
||||
"回想6",
|
||||
"回想7",
|
||||
"回想8",
|
||||
"回想9",
|
||||
"全開放",
|
||||
"エピローグスキップ",
|
||||
"EDメッセ終了",
|
||||
"序盤シーン",
|
||||
"体験版スイッチ",
|
||||
"体験版めっせ",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
""
|
||||
],
|
||||
"terms": {
|
||||
"basic": [
|
||||
"レベル",
|
||||
"Lv",
|
||||
"HP",
|
||||
"HP",
|
||||
"MP",
|
||||
"MP",
|
||||
"TP",
|
||||
"TP",
|
||||
"経験値",
|
||||
"EXP"
|
||||
],
|
||||
"commands": [
|
||||
"戦う",
|
||||
"逃げる",
|
||||
"攻撃",
|
||||
"防御",
|
||||
"アイテム",
|
||||
"スキル",
|
||||
"装備",
|
||||
"ステータス",
|
||||
"並び替え",
|
||||
"セーブ",
|
||||
"ゲーム終了",
|
||||
"オプション",
|
||||
"武器",
|
||||
"防具",
|
||||
"大事なもの",
|
||||
"装備",
|
||||
"最強装備",
|
||||
"全て外す",
|
||||
"ニューゲーム",
|
||||
"コンティニュー",
|
||||
null,
|
||||
"タイトルへ",
|
||||
"やめる",
|
||||
null,
|
||||
"購入する",
|
||||
"売却する"
|
||||
],
|
||||
"params": [
|
||||
"最大HP",
|
||||
"最大MP",
|
||||
"攻撃力",
|
||||
"防御力",
|
||||
"魔法力",
|
||||
"魔法防御",
|
||||
"敏捷性",
|
||||
"運",
|
||||
"命中率",
|
||||
"回避率"
|
||||
],
|
||||
"messages": {
|
||||
"alwaysDash": "常時ダッシュ",
|
||||
"commandRemember": "コマンド記憶",
|
||||
"touchUI": "タッチUI",
|
||||
"bgmVolume": "BGM 音量",
|
||||
"bgsVolume": "BGS 音量",
|
||||
"meVolume": "ME 音量",
|
||||
"seVolume": "SE 音量",
|
||||
"possession": "持っている数",
|
||||
"expTotal": "現在の%1",
|
||||
"expNext": "次の%1まで",
|
||||
"saveMessage": "どのファイルにセーブしますか?",
|
||||
"loadMessage": "どのファイルをロードしますか?",
|
||||
"file": "ファイル",
|
||||
"autosave": "オートセーブ",
|
||||
"partyName": "%1たち",
|
||||
"emerge": "%1が出現!",
|
||||
"preemptive": "%1は先手を取った!",
|
||||
"surprise": "%1は不意をつかれた!",
|
||||
"escapeStart": "%1は逃げ出した!",
|
||||
"escapeFailure": "しかし逃げることはできなかった!",
|
||||
"victory": "%1の勝利!",
|
||||
"defeat": "%1は戦いに敗れた。",
|
||||
"obtainExp": "%1 の%2を獲得!",
|
||||
"obtainGold": "お金を %1\\G 手に入れた!",
|
||||
"obtainItem": "%1を手に入れた!",
|
||||
"levelUp": "%1は%2 %3 に上がった!",
|
||||
"obtainSkill": "%1を覚えた!",
|
||||
"useItem": "%1は%2を使った!",
|
||||
"criticalToEnemy": "会心の一撃!!",
|
||||
"criticalToActor": "痛恨の一撃!!",
|
||||
"actorDamage": "%1は %2 のダメージを受けた!",
|
||||
"actorRecovery": "%1の%2が %3 回復した!",
|
||||
"actorGain": "%1の%2が %3 増えた!",
|
||||
"actorLoss": "%1の%2が %3 減った!",
|
||||
"actorDrain": "%1は%2を %3 奪われた!",
|
||||
"actorNoDamage": "%1はダメージを受けていない!",
|
||||
"actorNoHit": "ミス! %1はダメージを受けていない!",
|
||||
"enemyDamage": "%1に %2 のダメージを与えた!",
|
||||
"enemyRecovery": "%1の%2が %3 回復した!",
|
||||
"enemyGain": "%1の%2が %3 増えた!",
|
||||
"enemyLoss": "%1の%2が %3 減った!",
|
||||
"enemyDrain": "%1の%2を %3 奪った!",
|
||||
"enemyNoDamage": "%1にダメージを与えられない!",
|
||||
"enemyNoHit": "ミス! %1にダメージを与えられない!",
|
||||
"evasion": "%1は攻撃をかわした!",
|
||||
"magicEvasion": "%1は魔法を打ち消した!",
|
||||
"magicReflection": "%1は魔法を跳ね返した!",
|
||||
"counterAttack": "%1の反撃!",
|
||||
"substitute": "%1が%2をかばった!",
|
||||
"buffAdd": "%1の%2が上がった!",
|
||||
"debuffAdd": "%1の%2が下がった!",
|
||||
"buffRemove": "%1の%2が元に戻った!",
|
||||
"actionFailure": "%1には効かなかった!"
|
||||
}
|
||||
},
|
||||
"testBattlers": [
|
||||
{
|
||||
"actorId": 1,
|
||||
"level": 1,
|
||||
"equips": [
|
||||
2,
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"actorId": 4,
|
||||
"level": 1,
|
||||
"equips": [
|
||||
31,
|
||||
0,
|
||||
0,
|
||||
5,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"actorId": 6,
|
||||
"level": 1,
|
||||
"equips": [
|
||||
7,
|
||||
0,
|
||||
65,
|
||||
21,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"actorId": 7,
|
||||
"level": 1,
|
||||
"equips": [
|
||||
7,
|
||||
0,
|
||||
0,
|
||||
20,
|
||||
0
|
||||
]
|
||||
}
|
||||
],
|
||||
"testTroopId": 1,
|
||||
"title1Name": "taitoru",
|
||||
"title2Name": "",
|
||||
"titleBgm": {
|
||||
"name": "Theme4",
|
||||
"pan": 0,
|
||||
"pitch": 100,
|
||||
"volume": 90
|
||||
},
|
||||
"titleCommandWindow": {
|
||||
"background": 0,
|
||||
"offsetX": 0,
|
||||
"offsetY": 0
|
||||
},
|
||||
"variables": [
|
||||
"",
|
||||
"イベント変数",
|
||||
"ゴミ回収変数",
|
||||
"ゴミ表示変数",
|
||||
"回想用変数",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
""
|
||||
],
|
||||
"versionId": 13333771,
|
||||
"victoryMe": {
|
||||
"name": "Victory1",
|
||||
"pan": 0,
|
||||
"pitch": 100,
|
||||
"volume": 90
|
||||
},
|
||||
"weaponTypes": [
|
||||
"",
|
||||
"短剣",
|
||||
"剣",
|
||||
"フレイル",
|
||||
"斧",
|
||||
"ムチ",
|
||||
"杖",
|
||||
"弓",
|
||||
"クロスボウ",
|
||||
"銃",
|
||||
"爪",
|
||||
"グローブ",
|
||||
"槍"
|
||||
],
|
||||
"windowTone": [
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"tileSize": 48,
|
||||
"optSplashScreen": false,
|
||||
"hasEncryptedImages": true,
|
||||
"hasEncryptedAudio": true,
|
||||
"encryptionKey": "2d969e2cee8cfa07ce7ca0bb13c7a36d"
|
||||
}
|
||||
139590
data/Tilesets.json
Normal file
139590
data/Tilesets.json
Normal file
File diff suppressed because it is too large
Load diff
211
data/Troops.json
Normal file
211
data/Troops.json
Normal file
|
|
@ -0,0 +1,211 @@
|
|||
[
|
||||
null,
|
||||
{
|
||||
"id": 1,
|
||||
"members": [
|
||||
{
|
||||
"enemyId": 1,
|
||||
"x": 336,
|
||||
"y": 436,
|
||||
"hidden": false
|
||||
},
|
||||
{
|
||||
"enemyId": 1,
|
||||
"x": 480,
|
||||
"y": 436,
|
||||
"hidden": false
|
||||
}
|
||||
],
|
||||
"name": "ゴブリン*2",
|
||||
"pages": [
|
||||
{
|
||||
"conditions": {
|
||||
"actorHp": 50,
|
||||
"actorId": 1,
|
||||
"actorValid": false,
|
||||
"enemyHp": 50,
|
||||
"enemyIndex": 0,
|
||||
"enemyValid": false,
|
||||
"switchId": 1,
|
||||
"switchValid": false,
|
||||
"turnA": 0,
|
||||
"turnB": 0,
|
||||
"turnEnding": false,
|
||||
"turnValid": false
|
||||
},
|
||||
"list": [
|
||||
{
|
||||
"code": 0,
|
||||
"indent": 0,
|
||||
"parameters": []
|
||||
}
|
||||
],
|
||||
"span": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"members": [
|
||||
{
|
||||
"enemyId": 2,
|
||||
"x": 337,
|
||||
"y": 436,
|
||||
"hidden": false
|
||||
},
|
||||
{
|
||||
"enemyId": 2,
|
||||
"x": 480,
|
||||
"y": 436,
|
||||
"hidden": false
|
||||
}
|
||||
],
|
||||
"name": "ノーム*2",
|
||||
"pages": [
|
||||
{
|
||||
"conditions": {
|
||||
"actorHp": 50,
|
||||
"actorId": 1,
|
||||
"actorValid": false,
|
||||
"enemyHp": 50,
|
||||
"enemyIndex": 0,
|
||||
"enemyValid": false,
|
||||
"switchId": 1,
|
||||
"switchValid": false,
|
||||
"turnA": 0,
|
||||
"turnB": 0,
|
||||
"turnEnding": false,
|
||||
"turnValid": false
|
||||
},
|
||||
"list": [
|
||||
{
|
||||
"code": 0,
|
||||
"indent": 0,
|
||||
"parameters": []
|
||||
}
|
||||
],
|
||||
"span": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"members": [
|
||||
{
|
||||
"enemyId": 3,
|
||||
"x": 337,
|
||||
"y": 436,
|
||||
"hidden": false
|
||||
},
|
||||
{
|
||||
"enemyId": 3,
|
||||
"x": 479,
|
||||
"y": 436,
|
||||
"hidden": false
|
||||
}
|
||||
],
|
||||
"name": "クロウ*2",
|
||||
"pages": [
|
||||
{
|
||||
"conditions": {
|
||||
"actorHp": 50,
|
||||
"actorId": 1,
|
||||
"actorValid": false,
|
||||
"enemyHp": 50,
|
||||
"enemyIndex": 0,
|
||||
"enemyValid": false,
|
||||
"switchId": 1,
|
||||
"switchValid": false,
|
||||
"turnA": 0,
|
||||
"turnB": 0,
|
||||
"turnEnding": false,
|
||||
"turnValid": false
|
||||
},
|
||||
"list": [
|
||||
{
|
||||
"code": 0,
|
||||
"indent": 0,
|
||||
"parameters": []
|
||||
}
|
||||
],
|
||||
"span": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"members": [
|
||||
{
|
||||
"enemyId": 4,
|
||||
"x": 408,
|
||||
"y": 436,
|
||||
"hidden": false
|
||||
}
|
||||
],
|
||||
"name": "トレント",
|
||||
"pages": [
|
||||
{
|
||||
"conditions": {
|
||||
"actorHp": 50,
|
||||
"actorId": 1,
|
||||
"actorValid": false,
|
||||
"enemyHp": 50,
|
||||
"enemyIndex": 0,
|
||||
"enemyValid": false,
|
||||
"switchId": 1,
|
||||
"switchValid": false,
|
||||
"turnA": 0,
|
||||
"turnB": 0,
|
||||
"turnEnding": false,
|
||||
"turnValid": false
|
||||
},
|
||||
"list": [
|
||||
{
|
||||
"code": 0,
|
||||
"indent": 0,
|
||||
"parameters": []
|
||||
}
|
||||
],
|
||||
"span": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"members": [
|
||||
{
|
||||
"enemyId": 5,
|
||||
"x": 408,
|
||||
"y": 436,
|
||||
"hidden": false
|
||||
}
|
||||
],
|
||||
"name": "魔獣",
|
||||
"pages": [
|
||||
{
|
||||
"conditions": {
|
||||
"actorHp": 50,
|
||||
"actorId": 1,
|
||||
"actorValid": false,
|
||||
"enemyHp": 50,
|
||||
"enemyIndex": 0,
|
||||
"enemyValid": false,
|
||||
"switchId": 1,
|
||||
"switchValid": false,
|
||||
"turnA": 0,
|
||||
"turnB": 0,
|
||||
"turnEnding": false,
|
||||
"turnValid": false
|
||||
},
|
||||
"list": [
|
||||
{
|
||||
"code": 0,
|
||||
"indent": 0,
|
||||
"parameters": []
|
||||
}
|
||||
],
|
||||
"span": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
1703
data/Weapons.json
Normal file
1703
data/Weapons.json
Normal file
File diff suppressed because it is too large
Load diff
8842
js/libs/effekseer.min.js
vendored
Normal file
8842
js/libs/effekseer.min.js
vendored
Normal file
File diff suppressed because it is too large
Load diff
2086
js/libs/localforage.min.js
vendored
Normal file
2086
js/libs/localforage.min.js
vendored
Normal file
File diff suppressed because it is too large
Load diff
3219
js/libs/pako.min.js
vendored
Normal file
3219
js/libs/pako.min.js
vendored
Normal file
File diff suppressed because it is too large
Load diff
46358
js/libs/pixi.js
Normal file
46358
js/libs/pixi.js
Normal file
File diff suppressed because it is too large
Load diff
859
js/libs/vorbisdecoder.js
Normal file
859
js/libs/vorbisdecoder.js
Normal file
File diff suppressed because one or more lines are too long
161
js/main.js
Normal file
161
js/main.js
Normal file
|
|
@ -0,0 +1,161 @@
|
|||
//=============================================================================
|
||||
// main.js v1.8.0
|
||||
//=============================================================================
|
||||
|
||||
const scriptUrls = [
|
||||
"js/libs/pixi.js",
|
||||
"js/libs/pako.min.js",
|
||||
"js/libs/localforage.min.js",
|
||||
"js/libs/effekseer.min.js",
|
||||
"js/libs/vorbisdecoder.js",
|
||||
"js/rmmz_core.js",
|
||||
"js/rmmz_managers.js",
|
||||
"js/rmmz_objects.js",
|
||||
"js/rmmz_scenes.js",
|
||||
"js/rmmz_sprites.js",
|
||||
"js/rmmz_windows.js",
|
||||
"js/plugins.js",
|
||||
];
|
||||
const effekseerWasmUrl = "js/libs/effekseer.wasm";
|
||||
|
||||
class Main {
|
||||
constructor() {
|
||||
this.xhrSucceeded = false;
|
||||
this.loadCount = 0;
|
||||
this.error = null;
|
||||
}
|
||||
|
||||
run() {
|
||||
this.showLoadingSpinner();
|
||||
this.testXhr();
|
||||
this.hookNwjsClose();
|
||||
this.loadMainScripts();
|
||||
}
|
||||
|
||||
showLoadingSpinner() {
|
||||
const loadingSpinner = document.createElement("div");
|
||||
const loadingSpinnerImage = document.createElement("div");
|
||||
loadingSpinner.id = "loadingSpinner";
|
||||
loadingSpinnerImage.id = "loadingSpinnerImage";
|
||||
loadingSpinner.appendChild(loadingSpinnerImage);
|
||||
document.body.appendChild(loadingSpinner);
|
||||
}
|
||||
|
||||
eraseLoadingSpinner() {
|
||||
const loadingSpinner = document.getElementById("loadingSpinner");
|
||||
if (loadingSpinner) {
|
||||
document.body.removeChild(loadingSpinner);
|
||||
}
|
||||
}
|
||||
|
||||
testXhr() {
|
||||
const xhr = new XMLHttpRequest();
|
||||
xhr.open("GET", document.currentScript.src);
|
||||
xhr.onload = () => (this.xhrSucceeded = true);
|
||||
xhr.send();
|
||||
}
|
||||
|
||||
hookNwjsClose() {
|
||||
// [Note] When closing the window, the NW.js process sometimes does
|
||||
// not terminate properly. This code is a workaround for that.
|
||||
if (typeof nw === "object") {
|
||||
nw.Window.get().on("close", () => nw.App.quit());
|
||||
}
|
||||
}
|
||||
|
||||
loadMainScripts() {
|
||||
for (const url of scriptUrls) {
|
||||
const script = document.createElement("script");
|
||||
script.type = "text/javascript";
|
||||
script.src = url;
|
||||
script.async = false;
|
||||
script.defer = true;
|
||||
script.onload = this.onScriptLoad.bind(this);
|
||||
script.onerror = this.onScriptError.bind(this);
|
||||
script._url = url;
|
||||
document.body.appendChild(script);
|
||||
}
|
||||
this.numScripts = scriptUrls.length;
|
||||
window.addEventListener("load", this.onWindowLoad.bind(this));
|
||||
window.addEventListener("error", this.onWindowError.bind(this));
|
||||
}
|
||||
|
||||
onScriptLoad() {
|
||||
if (++this.loadCount === this.numScripts) {
|
||||
PluginManager.setup($plugins);
|
||||
}
|
||||
}
|
||||
|
||||
onScriptError(e) {
|
||||
this.printError("Failed to load", e.target._url);
|
||||
}
|
||||
|
||||
printError(name, message) {
|
||||
this.eraseLoadingSpinner();
|
||||
if (!document.getElementById("errorPrinter")) {
|
||||
const errorPrinter = document.createElement("div");
|
||||
errorPrinter.id = "errorPrinter";
|
||||
errorPrinter.innerHTML = this.makeErrorHtml(name, message);
|
||||
document.body.appendChild(errorPrinter);
|
||||
}
|
||||
}
|
||||
|
||||
makeErrorHtml(name, message) {
|
||||
const nameDiv = document.createElement("div");
|
||||
const messageDiv = document.createElement("div");
|
||||
nameDiv.id = "errorName";
|
||||
messageDiv.id = "errorMessage";
|
||||
nameDiv.innerHTML = name;
|
||||
messageDiv.innerHTML = message;
|
||||
return nameDiv.outerHTML + messageDiv.outerHTML;
|
||||
}
|
||||
|
||||
onWindowLoad() {
|
||||
if (!this.xhrSucceeded) {
|
||||
const message = "Your browser does not allow to read local files.";
|
||||
this.printError("Error", message);
|
||||
} else if (this.isPathRandomized()) {
|
||||
const message = "Please move the Game.app to a different folder.";
|
||||
this.printError("Error", message);
|
||||
} else if (this.error) {
|
||||
this.printError(this.error.name, this.error.message);
|
||||
} else {
|
||||
this.initEffekseerRuntime();
|
||||
}
|
||||
}
|
||||
|
||||
onWindowError(event) {
|
||||
if (!this.error) {
|
||||
this.error = event.error;
|
||||
}
|
||||
}
|
||||
|
||||
isPathRandomized() {
|
||||
// [Note] We cannot save the game properly when Gatekeeper Path
|
||||
// Randomization is in effect.
|
||||
return (
|
||||
typeof process === "object" &&
|
||||
process.mainModule.filename.startsWith("/private/var")
|
||||
);
|
||||
}
|
||||
|
||||
initEffekseerRuntime() {
|
||||
const onLoad = this.onEffekseerLoad.bind(this);
|
||||
const onError = this.onEffekseerError.bind(this);
|
||||
effekseer.initRuntime(effekseerWasmUrl, onLoad, onError);
|
||||
}
|
||||
|
||||
onEffekseerLoad() {
|
||||
this.eraseLoadingSpinner();
|
||||
SceneManager.run(Scene_Boot);
|
||||
}
|
||||
|
||||
onEffekseerError() {
|
||||
this.printError("Failed to load", effekseerWasmUrl);
|
||||
}
|
||||
}
|
||||
|
||||
const main = new Main();
|
||||
main.run();
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
180
js/plugins.js
Normal file
180
js/plugins.js
Normal file
|
|
@ -0,0 +1,180 @@
|
|||
// Generated by RPG Maker.
|
||||
// Do not edit this file directly.
|
||||
var $plugins = [
|
||||
{
|
||||
name: "PluginCommonBase",
|
||||
status: true,
|
||||
description: "パラメータ解析を提供する共通基盤です",
|
||||
parameters: {},
|
||||
},
|
||||
{
|
||||
name: "MakeScreenCapture",
|
||||
status: true,
|
||||
description: "画面キャプチャ管理プラグイン",
|
||||
parameters: {
|
||||
PNGキャプチャキー: "F6",
|
||||
JPEGキャプチャキー: "F7",
|
||||
WEBPキャプチャキー: "F9",
|
||||
Ctrl同時押し: "false",
|
||||
Alt同時押し: "false",
|
||||
ファイル名: "image",
|
||||
出力場所: "captures",
|
||||
保存形式: "png",
|
||||
連番桁数: "2",
|
||||
タイムスタンプ: "true",
|
||||
署名: "",
|
||||
署名サイズ: "22",
|
||||
署名画像: "",
|
||||
実行間隔: "0",
|
||||
効果音: "",
|
||||
JPEG品質: "9",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "MakeScreenMovie",
|
||||
status: true,
|
||||
description: "ゲーム動画作成プラグイン",
|
||||
parameters: {
|
||||
FunkKeyRecord: "F10",
|
||||
RecordSwitchId: "0",
|
||||
FileName: "movie_\\d",
|
||||
Location: "movies",
|
||||
IncludeAudio: "true",
|
||||
MovieFileVariableId: "0",
|
||||
TestOnly: "true",
|
||||
PreventRecordingDisruption: "true",
|
||||
MimeType: "自動",
|
||||
RefreshRate: "30",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "NRP_GameWindowSize",
|
||||
status: true,
|
||||
description: "v1.05 ゲーム全体のウィンドウサイズを変更&オプションに追加",
|
||||
parameters: {
|
||||
windowWidth: "Graphics.width",
|
||||
windowHeight: "Graphics.height",
|
||||
screenWidth: "",
|
||||
screenHeight: "",
|
||||
"<option>": "",
|
||||
useOption: "true",
|
||||
optionPosition: "2",
|
||||
optionName: "ウィンドウサイズ",
|
||||
optionDispType: "percent",
|
||||
windowSizeMin: "50",
|
||||
windowSizeMax: "150",
|
||||
windowSizeOffset: "25",
|
||||
"<cooperation>": "",
|
||||
overWriteSceneManagerRun: "false",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "MessageSkip",
|
||||
status: true,
|
||||
description: "メッセージスキッププラグイン",
|
||||
parameters: {
|
||||
スキップキー: "control",
|
||||
オートキー: "tab",
|
||||
スキップスイッチ: "0",
|
||||
オートスイッチ: "0",
|
||||
スキップアイコン: "140",
|
||||
オートアイコン: "75",
|
||||
アイコンX: "0",
|
||||
アイコンY: "0",
|
||||
押し続けスキップ: "true",
|
||||
オート待機フレーム: "100 + textSize * 10",
|
||||
終了解除スイッチID: "0",
|
||||
スキップピクチャ: "",
|
||||
スキップピクチャX: "500",
|
||||
スキップピクチャY: "0",
|
||||
オートピクチャ: "",
|
||||
オートピクチャX: "750",
|
||||
オートピクチャY: "0",
|
||||
スイッチピクチャ: "",
|
||||
スイッチピクチャトリガー: "0",
|
||||
スイッチピクチャX: "750",
|
||||
スイッチピクチャY: "0",
|
||||
ボタン原点: "0",
|
||||
ボタン表示スイッチID: "0",
|
||||
ピクチャ座標タイプ: "relative",
|
||||
無効化スイッチ: "0",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "MessageWindowHidden",
|
||||
status: true,
|
||||
description: "メッセージウィンドウ一時消去プラグイン",
|
||||
parameters: {
|
||||
triggerButton: '["右クリック"]',
|
||||
triggerSwitch: "0",
|
||||
linkPictureNumbers: "[]",
|
||||
linkShowPictureNumbers: "[]",
|
||||
disableLinkSwitchId: "0",
|
||||
disableSwitchId: "0",
|
||||
disableInBattle: "false",
|
||||
disableInChoice: "true",
|
||||
restoreByDecision: "false",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "NRP_MessageWindow",
|
||||
status: true,
|
||||
description: "v1.02 メッセージウィンドウを調整する。",
|
||||
parameters: {
|
||||
"<MessageWindow>": "",
|
||||
WindowWidth: "Graphics.boxWidth",
|
||||
WindowHeight: "this.fittingHeight(3) + 8",
|
||||
WindowX: "",
|
||||
WindowY: "(this._positionType * (Graphics.boxHeight - this.height)) / 2",
|
||||
LineHeight: "",
|
||||
AdjustMessageX: "0",
|
||||
AdjustMessageY: "0",
|
||||
MessageFontSize: "",
|
||||
WindowOpacity: "",
|
||||
MaskImage: "",
|
||||
NoMaskOpacity: "",
|
||||
FixIconY: "true",
|
||||
"<NameBoxWindow>": "",
|
||||
NameBoxAdjustX: "",
|
||||
NameBoxAdjustY: "",
|
||||
NameBoxFontSize: "",
|
||||
NameBoxOpacity: "",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "ParallelBgs",
|
||||
status: true,
|
||||
description: "BGS並行演奏プラグイン",
|
||||
parameters: {},
|
||||
},
|
||||
{
|
||||
name: "AnotherNewGame",
|
||||
status: false,
|
||||
description: "アナザーニューゲーム追加プラグイン",
|
||||
parameters: {
|
||||
anotherDataList:
|
||||
'["{\\"name\\":\\"回想モード\\",\\"mapId\\":\\"26\\",\\"mapX\\":\\"1\\",\\"mapY\\":\\"1\\",\\"hidden\\":\\"false\\",\\"disable\\":\\"false\\",\\"addPosition\\":\\"0\\",\\"switchId\\":\\"0\\",\\"fileLoad\\":\\"false\\",\\"noFadeout\\":\\"false\\"}"]',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "CustomizeConfigDefault",
|
||||
status: true,
|
||||
description: "オプションデフォルト値設定プラグイン",
|
||||
parameters: {
|
||||
AlwaysDash: "false",
|
||||
CommandRemember: "false",
|
||||
TouchUi: "true",
|
||||
BgmVolume: "100",
|
||||
BgsVolume: "100",
|
||||
MeVolume: "100",
|
||||
SeVolume: "100",
|
||||
EraseAlwaysDash: "false",
|
||||
EraseCommandRemember: "true",
|
||||
EraseTouchUi: "true",
|
||||
EraseBgmVolume: "false",
|
||||
EraseBgsVolume: "false",
|
||||
EraseMeVolume: "false",
|
||||
EraseSeVolume: "false",
|
||||
},
|
||||
},
|
||||
];
|
||||
105
js/plugins/AltMenuScreen.js
Normal file
105
js/plugins/AltMenuScreen.js
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
//=============================================================================
|
||||
// RPG Maker MZ - Alternative Menu Screen
|
||||
//=============================================================================
|
||||
|
||||
/*:
|
||||
* @target MZ
|
||||
* @plugindesc Alternative menu screen layout.
|
||||
* @author Yoji Ojima
|
||||
*
|
||||
* @help AltMenuScreen.js
|
||||
*
|
||||
* This plugin changes the layout of the menu screen.
|
||||
* It puts the commands on the top and the status on the bottom.
|
||||
*
|
||||
* It does not provide plugin commands.
|
||||
*/
|
||||
|
||||
/*:ja
|
||||
* @target MZ
|
||||
* @plugindesc メニュー画面のレイアウトを変更します。
|
||||
* @author Yoji Ojima
|
||||
*
|
||||
* @help AltMenuScreen.js
|
||||
*
|
||||
* このプラグインは、メニュー画面のレイアウトを変更します。
|
||||
* コマンドを上側に、ステータスを下側に配置します。
|
||||
*
|
||||
* プラグインコマンドはありません。
|
||||
*/
|
||||
|
||||
(() => {
|
||||
Scene_MenuBase.prototype.commandWindowHeight = function () {
|
||||
return this.calcWindowHeight(2, true);
|
||||
};
|
||||
|
||||
Scene_MenuBase.prototype.goldWindowHeight = function () {
|
||||
return this.calcWindowHeight(1, true);
|
||||
};
|
||||
|
||||
Scene_Menu.prototype.commandWindowRect = function () {
|
||||
const ww = Graphics.boxWidth;
|
||||
const wh = this.commandWindowHeight();
|
||||
const wx = 0;
|
||||
const wy = this.mainAreaTop();
|
||||
return new Rectangle(wx, wy, ww, wh);
|
||||
};
|
||||
|
||||
Scene_Menu.prototype.statusWindowRect = function () {
|
||||
const h1 = this.commandWindowHeight();
|
||||
const h2 = this.goldWindowHeight();
|
||||
const ww = Graphics.boxWidth;
|
||||
const wh = this.mainAreaHeight() - h1 - h2;
|
||||
const wx = 0;
|
||||
const wy = this.mainAreaTop() + this.commandWindowHeight();
|
||||
return new Rectangle(wx, wy, ww, wh);
|
||||
};
|
||||
|
||||
Scene_ItemBase.prototype.actorWindowRect = function () {
|
||||
const rect = Scene_Menu.prototype.statusWindowRect();
|
||||
rect.y = this.mainAreaBottom() - rect.height;
|
||||
return rect;
|
||||
};
|
||||
|
||||
Window_MenuCommand.prototype.maxCols = function () {
|
||||
return 4;
|
||||
};
|
||||
|
||||
Window_MenuCommand.prototype.numVisibleRows = function () {
|
||||
return 2;
|
||||
};
|
||||
|
||||
Window_MenuStatus.prototype.maxCols = function () {
|
||||
return 4;
|
||||
};
|
||||
|
||||
Window_MenuStatus.prototype.numVisibleRows = function () {
|
||||
return 1;
|
||||
};
|
||||
|
||||
Window_MenuStatus.prototype.drawItemImage = function (index) {
|
||||
const actor = this.actor(index);
|
||||
const rect = this.itemRectWithPadding(index);
|
||||
const w = Math.min(rect.width, 144);
|
||||
const h = Math.min(rect.height, 144);
|
||||
const lineHeight = this.lineHeight();
|
||||
this.changePaintOpacity(actor.isBattleMember());
|
||||
this.drawActorFace(actor, rect.x, rect.y + lineHeight * 2, w, h);
|
||||
this.changePaintOpacity(true);
|
||||
};
|
||||
|
||||
Window_MenuStatus.prototype.drawItemStatus = function (index) {
|
||||
const actor = this.actor(index);
|
||||
const rect = this.itemRectWithPadding(index);
|
||||
const x = rect.x;
|
||||
const y = rect.y;
|
||||
const width = rect.width;
|
||||
const bottom = y + rect.height;
|
||||
const 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.placeBasicGauges(actor, x, bottom - lineHeight * 3, width);
|
||||
this.drawActorIcons(actor, x, bottom - lineHeight * 1, width);
|
||||
};
|
||||
})();
|
||||
126
js/plugins/AltSaveScreen.js
Normal file
126
js/plugins/AltSaveScreen.js
Normal file
|
|
@ -0,0 +1,126 @@
|
|||
//=============================================================================
|
||||
// RPG Maker MZ - Alternative Save Screen
|
||||
//=============================================================================
|
||||
|
||||
/*:
|
||||
* @target MZ
|
||||
* @plugindesc Alternative save/load screen layout.
|
||||
* @author Yoji Ojima
|
||||
*
|
||||
* @help AltSaveScreen.js
|
||||
*
|
||||
* This plugin changes the layout of the save/load screen.
|
||||
* It puts the file list on the top and the details on the bottom.
|
||||
*
|
||||
* It does not provide plugin commands.
|
||||
*/
|
||||
|
||||
/*:ja
|
||||
* @target MZ
|
||||
* @plugindesc セーブ/ロード画面のレイアウトを変更します。
|
||||
* @author Yoji Ojima
|
||||
*
|
||||
* @help AltSaveScreen.js
|
||||
*
|
||||
* このプラグインは、セーブ/ロード画面のレイアウトを変更します。
|
||||
* ファイル一覧を上側に、詳細を下側に配置します。
|
||||
*
|
||||
* プラグインコマンドはありません。
|
||||
*/
|
||||
|
||||
(() => {
|
||||
const _Scene_File_create = Scene_File.prototype.create;
|
||||
Scene_File.prototype.create = function () {
|
||||
_Scene_File_create.apply(this, arguments);
|
||||
this._listWindow.height = this._listWindow.fittingHeight(3);
|
||||
const x = 0;
|
||||
const y = this._listWindow.y + this._listWindow.height;
|
||||
const width = Graphics.boxWidth;
|
||||
const height = Graphics.boxHeight - y;
|
||||
const rect = new Rectangle(x, y, width, height);
|
||||
const statusWindow = new Window_SavefileStatus(rect);
|
||||
this._listWindow.mzkp_statusWindow = statusWindow;
|
||||
this.addWindow(statusWindow);
|
||||
};
|
||||
|
||||
const _Scene_File_start = Scene_File.prototype.start;
|
||||
Scene_File.prototype.start = function () {
|
||||
_Scene_File_start.apply(this, arguments);
|
||||
this._listWindow.ensureCursorVisible();
|
||||
this._listWindow.callUpdateHelp();
|
||||
};
|
||||
|
||||
Window_SavefileList.prototype.windowWidth = function () {
|
||||
return Graphics.boxWidth;
|
||||
};
|
||||
|
||||
Window_SavefileList.prototype.maxCols = function () {
|
||||
return 4;
|
||||
};
|
||||
|
||||
Window_SavefileList.prototype.itemHeight = function () {
|
||||
return this.lineHeight() * 2 + 16;
|
||||
};
|
||||
|
||||
const _Window_SavefileList_callUpdateHelp =
|
||||
Window_SavefileList.prototype.callUpdateHelp;
|
||||
Window_SavefileList.prototype.callUpdateHelp = function () {
|
||||
_Window_SavefileList_callUpdateHelp.apply(this, arguments);
|
||||
if (this.active && this.mzkp_statusWindow) {
|
||||
this.mzkp_statusWindow.setSavefileId(this.savefileId());
|
||||
}
|
||||
};
|
||||
|
||||
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 (rect) {
|
||||
Window_Base.prototype.initialize.call(this, rect);
|
||||
this._savefileId = 1;
|
||||
};
|
||||
|
||||
Window_SavefileStatus.prototype.setSavefileId = function (id) {
|
||||
this._savefileId = id;
|
||||
this.refresh();
|
||||
};
|
||||
|
||||
Window_SavefileStatus.prototype.refresh = function () {
|
||||
const info = DataManager.savefileInfo(this._savefileId);
|
||||
const rect = this.contents.rect;
|
||||
this.contents.clear();
|
||||
this.resetTextColor();
|
||||
this.drawTitle(this._savefileId, rect.x, rect.y);
|
||||
if (info) {
|
||||
this.drawContents(info, rect);
|
||||
}
|
||||
};
|
||||
|
||||
Window_SavefileStatus.prototype.drawTitle = function (savefileId, x, y) {
|
||||
if (savefileId === 0) {
|
||||
this.drawText(TextManager.autosave, x, y, 180);
|
||||
} else {
|
||||
this.drawText(TextManager.file + " " + savefileId, x, y, 180);
|
||||
}
|
||||
};
|
||||
|
||||
Window_SavefileStatus.prototype.drawContents = function (info, rect) {
|
||||
const bottom = rect.y + rect.height;
|
||||
const playtimeY = bottom - this.lineHeight();
|
||||
this.drawText(info.title, rect.x + 192, rect.y, rect.width - 192);
|
||||
this.drawPartyfaces(info.faces, rect.x, bottom - 144);
|
||||
this.drawText(info.playtime, rect.x, playtimeY, rect.width, "right");
|
||||
};
|
||||
|
||||
Window_SavefileStatus.prototype.drawPartyfaces = function (faces, x, y) {
|
||||
if (faces) {
|
||||
for (let i = 0; i < faces.length; i++) {
|
||||
const data = faces[i];
|
||||
this.drawFace(data[0], data[1], x + i * 150, y);
|
||||
}
|
||||
}
|
||||
};
|
||||
})();
|
||||
440
js/plugins/AnotherNewGame.js
Normal file
440
js/plugins/AnotherNewGame.js
Normal file
|
|
@ -0,0 +1,440 @@
|
|||
//=============================================================================
|
||||
// AnotherNewGame.js
|
||||
// ----------------------------------------------------------------------------
|
||||
// (C)2015 Triacontane
|
||||
// This plugin is released under the MIT License.
|
||||
// http://opensource.org/licenses/mit-license.php
|
||||
// ----------------------------------------------------------------------------
|
||||
// Version
|
||||
// 4.0.2 2021/04/08 orderAfterアノテーションを追加
|
||||
// 4.0.1 2020/11/29 ブラウザからの実行でエラーになる問題を修正
|
||||
// 4.0.0 2020/11/11 MZ向けに全面的にリファクタリング
|
||||
// 3.0.0 2020/03/08 アナザーニューゲームコマンドを複数登録できるよう修正。以前のバージョンと互換性がありません。
|
||||
// 2.0.0 2019/03/19 アナザーロード時に場所移動せず、セーブ位置から開始できる機能を追加
|
||||
// アナザーニューゲーム時に自動でONになるスイッチを追加
|
||||
// パラメータの型指定機能に対応
|
||||
// 1.4.0 2017/06/18 アナザーニューゲームの追加位置を指定できる機能を追加
|
||||
// 1.3.0 2017/05/27 ニューゲームを非表示にできる機能を追加
|
||||
// 1.2.4 2017/05/23 プラグインコマンドのヘルプを修正
|
||||
// 1.2.3 2017/01/25 同一サーバで同プラグインを適用した複数のゲームを公開する際に、設定が重複するのを避けるために管理番号を追加
|
||||
// 1.2.2 2016/12/10 アナザーニューゲームをロードした際に、ロード元でイベントが実行中だった場合に続きが実行されてしまう現象を修正
|
||||
// 1.2.1 2016/11/23 遠景タイトルプラグイン(ParallaxTitle.js)と連携する設定を追加
|
||||
// 1.2.0 2016/11/22 アナザーニューゲームを選択した際に、フェードアウトしなくなる設定を追加
|
||||
// 1.1.0 2016/03/29 fftfanttさんからご提供いただいたコードを反映させ、アナザーニューゲーム選択時に
|
||||
// 既存のセーブファイルをロードする機能を追加
|
||||
// 1.0.1 2015/11/10 プラグイン適用中にセーブできなくなる不具合を修正
|
||||
// 1.0.0 2015/11/07 初版
|
||||
// ----------------------------------------------------------------------------
|
||||
// [Blog] : https://triacontane.blogspot.jp/
|
||||
// [Twitter]: https://twitter.com/triacontane/
|
||||
// [GitHub] : https://github.com/triacontane/
|
||||
//=============================================================================
|
||||
|
||||
/*:
|
||||
* @plugindesc アナザーニューゲーム追加プラグイン
|
||||
* @target MZ
|
||||
* @url https://github.com/triacontane/RPGMakerMV/tree/mz_master/AnotherNewGame.js
|
||||
* @base PluginCommonBase
|
||||
* @orderAfter PluginCommonBase
|
||||
* @author トリアコンタン
|
||||
*
|
||||
* @param anotherDataList
|
||||
* @text アナザーニューゲームリスト
|
||||
* @desc アナザーニューゲームのコマンド一覧です。
|
||||
* @default []
|
||||
* @type struct<COMMAND>[]
|
||||
*
|
||||
* @command SETTING
|
||||
* @text コマンド制御
|
||||
* @desc アナザーニューゲームコマンドの表示と利用可否を制御します。
|
||||
*
|
||||
* @arg type
|
||||
* @text 操作種別
|
||||
* @desc 操作種別を選択します。
|
||||
* @default VISIBLE
|
||||
* @type select
|
||||
* @option コマンド表示
|
||||
* @value VISIBLE
|
||||
* @option コマンド非表示
|
||||
* @value HIDDEN
|
||||
* @option コマンド利用許可
|
||||
* @value ENABLE
|
||||
* @option コマンド利用禁止
|
||||
* @value DISABLE
|
||||
*
|
||||
* @arg index
|
||||
* @text コマンドインデックス
|
||||
* @desc 操作対象のコマンドインデックスです。(開始位置は0)
|
||||
* @type number
|
||||
* @default 0
|
||||
*
|
||||
* @command NEW_GAME_SETTING
|
||||
* @text ニューゲーム制御
|
||||
* @desc ニューゲームコマンドの表示を制御します。設定次第でゲームが開始できなくなるので注意してください。
|
||||
*
|
||||
* @arg type
|
||||
* @text 操作種別
|
||||
* @desc 操作種別を選択します。
|
||||
* @default VISIBLE
|
||||
* @type select
|
||||
* @option コマンド表示
|
||||
* @value VISIBLE
|
||||
* @option コマンド非表示
|
||||
* @value HIDDEN
|
||||
*
|
||||
* @help AnotherNewGame.js
|
||||
*
|
||||
* タイトル画面にもう一つのニューゲームコマンドを追加します。
|
||||
* 選択するとニューゲームとは別の指定したマップに移動してゲーム開始します。
|
||||
* クリア後のおまけやCG回想モード、スタッフクレジット、ミニゲーム、
|
||||
* 隠し要素など使い手次第で様々な用途に使えます。
|
||||
*
|
||||
* 選択肢は、あらかじめ非表示あるいは選択禁止にできます。
|
||||
* これらはプラグインコマンドから解除できます。
|
||||
* 解除状態はファイル「anotherNewGame.rmmzsave」に保存されます。
|
||||
*
|
||||
* 利用規約:
|
||||
* 作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)
|
||||
* についても制限はありません。
|
||||
* このプラグインはもうあなたのものです。
|
||||
*/
|
||||
|
||||
/*~struct~COMMAND:
|
||||
* @param name
|
||||
* @text コマンド名称
|
||||
* @desc タイトル画面に表示されるコマンド名です。
|
||||
* @default Another New Game
|
||||
*
|
||||
* @param mapId
|
||||
* @text マップID
|
||||
* @desc 移動先のマップIDです。0を指定した場合、場所移動しません。
|
||||
* @default 1
|
||||
* @type number
|
||||
*
|
||||
* @param mapX
|
||||
* @text X座標
|
||||
* @desc 移動先のX座標です。
|
||||
* @default 1
|
||||
* @type number
|
||||
*
|
||||
* @param mapY
|
||||
* @text Y座標
|
||||
* @desc 移動先のY座標です。
|
||||
* @default 1
|
||||
* @type number
|
||||
*
|
||||
* @param hidden
|
||||
* @text デフォルト非表示
|
||||
* @desc デフォルトで選択肢を非表示にします。プラグインコマンドで有効化できます。
|
||||
* @default false
|
||||
* @type boolean
|
||||
*
|
||||
* @param disable
|
||||
* @text デフォルト使用禁止
|
||||
* @desc デフォルトで選択肢を選択禁止にします。プラグインコマンドで有効化できます。
|
||||
* @default false
|
||||
* @type boolean
|
||||
*
|
||||
* @param addPosition
|
||||
* @text 追加位置
|
||||
* @desc アナザーニューゲームのコマンド追加位置です。(1:ニューゲームの上、2:コンティニューの上、3:オプションの上)
|
||||
* @default 0
|
||||
* @type select
|
||||
* @option オプションの下
|
||||
* @value 0
|
||||
* @option ニューゲームの上
|
||||
* @value 1
|
||||
* @option コンティニューの上
|
||||
* @value 2
|
||||
* @option オプションの上
|
||||
* @value 3
|
||||
*
|
||||
* @param switchId
|
||||
* @text 開始時にONになるスイッチ
|
||||
* @desc アナザーニューゲーム開始時に自動でONになるスイッチを指定できます。
|
||||
* @default 0
|
||||
* @type switch
|
||||
*
|
||||
* @param fileLoad
|
||||
* @text ファイルロード
|
||||
* @desc アナザーニューゲーム選択時に、ロード画面に遷移して既存セーブデータをロードします。
|
||||
* @default false
|
||||
* @type boolean
|
||||
*
|
||||
* @param noFadeout
|
||||
* @text フェードアウト無効
|
||||
* @desc アナザーニューゲーム選択時に、オーディオや画面がフェードアウトしなくなります。
|
||||
* @default false
|
||||
* @type boolean
|
||||
*/
|
||||
|
||||
(function () {
|
||||
let localExtraStageIndex = -1;
|
||||
|
||||
const script = document.currentScript;
|
||||
const parameters = PluginManagerEx.createParameter(script);
|
||||
|
||||
PluginManagerEx.registerCommand(script, "SETTING", (args) => {
|
||||
const index = args.index;
|
||||
switch (args.type) {
|
||||
case "VISIBLE":
|
||||
ANGSettingManager.setVisible(index, true);
|
||||
break;
|
||||
case "ENABLE":
|
||||
ANGSettingManager.setEnable(index, true);
|
||||
break;
|
||||
case "HIDDEN":
|
||||
ANGSettingManager.setVisible(index, false);
|
||||
break;
|
||||
case "DISABLE":
|
||||
ANGSettingManager.setEnable(index, false);
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
ANGSettingManager.save();
|
||||
});
|
||||
|
||||
PluginManagerEx.registerCommand(script, "NEW_GAME_SETTING", (args) => {
|
||||
ANGSettingManager.newGameHidden = args.type === "HIDDEN";
|
||||
ANGSettingManager.save();
|
||||
});
|
||||
|
||||
//=============================================================================
|
||||
// Game_Map
|
||||
// アナザーニューゲームのロード時に実行していたイベントを中断します。
|
||||
//=============================================================================
|
||||
Game_Map.prototype.abortInterpreter = function () {
|
||||
if (this.isEventRunning()) {
|
||||
this._interpreter.command115();
|
||||
}
|
||||
};
|
||||
|
||||
//=============================================================================
|
||||
// Scene_Boot
|
||||
// アナザーニューゲームデータを読み込みます。
|
||||
//=============================================================================
|
||||
const _Scene_Boot_onDatabaseLoaded = Scene_Boot.prototype.onDatabaseLoaded;
|
||||
Scene_Boot.prototype.onDatabaseLoaded = function () {
|
||||
_Scene_Boot_onDatabaseLoaded.apply(this, arguments);
|
||||
ANGSettingManager.loadData();
|
||||
};
|
||||
|
||||
const _Scene_Boot_isReady = Scene_Boot.prototype.isReady;
|
||||
Scene_Boot.prototype.isReady = function () {
|
||||
return (
|
||||
_Scene_Boot_isReady.apply(this, arguments) && ANGSettingManager.isLoaded()
|
||||
);
|
||||
};
|
||||
|
||||
//=============================================================================
|
||||
// Scene_Title
|
||||
// アナザーニューゲームの選択時の処理を追加定義します。
|
||||
//=============================================================================
|
||||
const _Scene_Title_commandContinue = Scene_Title.prototype.commandContinue;
|
||||
Scene_Title.prototype.commandContinue = function () {
|
||||
_Scene_Title_commandContinue.call(this);
|
||||
localExtraStageIndex = -1;
|
||||
};
|
||||
|
||||
const _Scene_Title_commandNewGameSecond =
|
||||
Scene_Title.prototype.commandNewGameSecond;
|
||||
Scene_Title.prototype.commandNewGameSecond = function (index) {
|
||||
if (_Scene_Title_commandNewGameSecond) {
|
||||
_Scene_Title_commandNewGameSecond.apply(this, arguments);
|
||||
}
|
||||
const command = parameters.anotherDataList[index];
|
||||
if (command.noFadeout) {
|
||||
this._noFadeout = true;
|
||||
}
|
||||
if (!command.fileLoad) {
|
||||
const preMapId = $dataSystem.startMapId;
|
||||
const preStartX = $dataSystem.startX;
|
||||
const preStartY = $dataSystem.startY;
|
||||
const newMapId = command.mapId;
|
||||
if (newMapId > 0) {
|
||||
$dataSystem.startMapId = newMapId;
|
||||
$dataSystem.startX = command.mapX || 1;
|
||||
$dataSystem.startY = command.mapY || 1;
|
||||
}
|
||||
this.commandNewGame();
|
||||
$dataSystem.startMapId = preMapId;
|
||||
$dataSystem.startX = preStartX;
|
||||
$dataSystem.startY = preStartY;
|
||||
const switchId = command.switchId;
|
||||
if (switchId > 0) {
|
||||
$gameSwitches.setValue(switchId, true);
|
||||
}
|
||||
} else {
|
||||
this.commandContinue();
|
||||
localExtraStageIndex = index;
|
||||
}
|
||||
};
|
||||
|
||||
const _Scene_Title_createCommandWindow =
|
||||
Scene_Title.prototype.createCommandWindow;
|
||||
Scene_Title.prototype.createCommandWindow = function () {
|
||||
_Scene_Title_createCommandWindow.call(this);
|
||||
parameters.anotherDataList.forEach((command, index) => {
|
||||
if (ANGSettingManager.isVisible(index)) {
|
||||
this._commandWindow.setHandler(
|
||||
"nameGame2_" + index,
|
||||
this.commandNewGameSecond.bind(this, index)
|
||||
);
|
||||
}
|
||||
}, this);
|
||||
};
|
||||
|
||||
Scene_Title.prototype.fadeOutAll = function () {
|
||||
if (!this._noFadeout) {
|
||||
Scene_Base.prototype.fadeOutAll.apply(this, arguments);
|
||||
}
|
||||
};
|
||||
|
||||
//=============================================================================
|
||||
// Scene_Load
|
||||
// ロード成功時にアナザーポイントに移動します。
|
||||
//=============================================================================
|
||||
const _Scene_Load_onLoadSuccess = Scene_Load.prototype.onLoadSuccess;
|
||||
Scene_Load.prototype.onLoadSuccess = function () {
|
||||
_Scene_Load_onLoadSuccess.call(this);
|
||||
if (localExtraStageIndex >= 0) {
|
||||
const command = parameters.anotherDataList[localExtraStageIndex];
|
||||
const mapId = command.mapId;
|
||||
if (mapId > 0) {
|
||||
const x = command.mapX || 1;
|
||||
const y = command.mapY || 1;
|
||||
$gamePlayer.reserveTransfer(mapId, x, y);
|
||||
}
|
||||
$gameMap.abortInterpreter();
|
||||
DataManager.selectSavefileForNewGame();
|
||||
const switchId = command.switchId;
|
||||
if (switchId > 0) {
|
||||
$gameSwitches.setValue(switchId, true);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
//=============================================================================
|
||||
// Window_TitleCommand
|
||||
// アナザーニューゲームの選択肢を追加定義します。
|
||||
//=============================================================================
|
||||
const _Window_TitleCommand_makeCommandList =
|
||||
Window_TitleCommand.prototype.makeCommandList;
|
||||
Window_TitleCommand.prototype.makeCommandList = function () {
|
||||
_Window_TitleCommand_makeCommandList.call(this);
|
||||
parameters.anotherDataList.forEach(function (command, index) {
|
||||
if (ANGSettingManager.isVisible(index)) {
|
||||
this.makeAnotherNewGameCommand(command, index);
|
||||
}
|
||||
}, this);
|
||||
if (ANGSettingManager.newGameHidden) {
|
||||
this.eraseCommandNewGame();
|
||||
}
|
||||
this.height = this.fittingHeight(this._list.length);
|
||||
this.createContents();
|
||||
this.updatePlacement();
|
||||
};
|
||||
|
||||
Window_TitleCommand.prototype.makeAnotherNewGameCommand = function (
|
||||
command,
|
||||
index
|
||||
) {
|
||||
this.addCommand(
|
||||
command.name,
|
||||
"nameGame2_" + index,
|
||||
ANGSettingManager.isEnable(index)
|
||||
);
|
||||
const addPosition = command.addPosition;
|
||||
if (addPosition > 0) {
|
||||
const anotherCommand = this._list.pop();
|
||||
this._list.splice(addPosition - 1, 0, anotherCommand);
|
||||
}
|
||||
};
|
||||
|
||||
Window_TitleCommand.prototype.eraseCommandNewGame = function () {
|
||||
this._list = this._list.filter(function (command) {
|
||||
return command.symbol !== "newGame";
|
||||
});
|
||||
};
|
||||
|
||||
Window_TitleCommand.prototype.updatePlacement = function () {
|
||||
const addSize = this._list.length - 3;
|
||||
if (addSize > 0) {
|
||||
this.y -= (addSize * this.itemHeight()) / 2;
|
||||
}
|
||||
};
|
||||
|
||||
//=============================================================================
|
||||
// ANGManager
|
||||
// アナザーニューゲームの設定ファイルのセーブとロードを定義します。
|
||||
//=============================================================================
|
||||
function ANGSettingManager() {
|
||||
throw new Error("This is a static class");
|
||||
}
|
||||
|
||||
ANGSettingManager._fileName = "anotherNewGame";
|
||||
|
||||
ANGSettingManager._visibleList = [];
|
||||
ANGSettingManager._enableList = [];
|
||||
ANGSettingManager.newGameHidden = false;
|
||||
|
||||
ANGSettingManager.make = function () {
|
||||
const info = {};
|
||||
info.visibleList = this._visibleList;
|
||||
info.enableList = this._enableList;
|
||||
info.newGameHidden = this.newGameHidden;
|
||||
return info;
|
||||
};
|
||||
|
||||
ANGSettingManager.isVisible = function (index) {
|
||||
if (
|
||||
this._visibleList[index] !== undefined &&
|
||||
this._visibleList[index] !== null
|
||||
) {
|
||||
return this._visibleList[index];
|
||||
} else {
|
||||
return !parameters.anotherDataList[index].hidden;
|
||||
}
|
||||
};
|
||||
|
||||
ANGSettingManager.setVisible = function (index, value) {
|
||||
this._visibleList[index] = value;
|
||||
};
|
||||
|
||||
ANGSettingManager.isEnable = function (index) {
|
||||
if (
|
||||
this._enableList[index] !== undefined &&
|
||||
this._enableList[index] !== null
|
||||
) {
|
||||
return this._enableList[index];
|
||||
} else {
|
||||
return !parameters.anotherDataList[index].disable;
|
||||
}
|
||||
};
|
||||
|
||||
ANGSettingManager.setEnable = function (index, value) {
|
||||
this._enableList[index] = value;
|
||||
};
|
||||
|
||||
ANGSettingManager.loadData = function () {
|
||||
StorageManager.loadObject(this._fileName)
|
||||
.then((info) => {
|
||||
this._visibleList = info.visibleList || [];
|
||||
this._enableList = info.enableList || [];
|
||||
this.newGameHidden = !!info.newGameHidden;
|
||||
this._loaded = true;
|
||||
})
|
||||
.catch(() => {
|
||||
this._loaded = true;
|
||||
});
|
||||
};
|
||||
|
||||
ANGSettingManager.isLoaded = function () {
|
||||
return this._loaded;
|
||||
};
|
||||
|
||||
ANGSettingManager.save = function () {
|
||||
StorageManager.saveObject(this._fileName, ANGSettingManager.make());
|
||||
};
|
||||
})();
|
||||
103
js/plugins/ButtonPicture.js
Normal file
103
js/plugins/ButtonPicture.js
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
//=============================================================================
|
||||
// RPG Maker MZ - Button Picture
|
||||
//=============================================================================
|
||||
|
||||
/*:
|
||||
* @target MZ
|
||||
* @plugindesc Makes a picture clickable.
|
||||
* @author Yoji Ojima
|
||||
*
|
||||
* @help ButtonPicture.js
|
||||
*
|
||||
* This plugin provides a command to call a common event when a picture is
|
||||
* clicked.
|
||||
*
|
||||
* Use it in the following procedure.
|
||||
* 1. Execute "Show Picture" to display your button image.
|
||||
* 2. Call the plugin command "Set Button Picture".
|
||||
*
|
||||
* @command set
|
||||
* @text Set Button Picture
|
||||
* @desc Makes the specified picture clickable.
|
||||
*
|
||||
* @arg pictureId
|
||||
* @type number
|
||||
* @min 1
|
||||
* @max 100
|
||||
* @default 1
|
||||
* @text Picture Number
|
||||
* @desc Control number of the picture.
|
||||
*
|
||||
* @arg commonEventId
|
||||
* @type common_event
|
||||
* @default 1
|
||||
* @text Common Event
|
||||
* @desc Common event to call when the picture is clicked.
|
||||
*/
|
||||
|
||||
/*:ja
|
||||
* @target MZ
|
||||
* @plugindesc ピクチャをクリック可能にします。
|
||||
* @author Yoji Ojima
|
||||
*
|
||||
* @help ButtonPicture.js
|
||||
*
|
||||
* このプラグインは、ピクチャのクリック時にコモンイベントを呼び出すコマンドを
|
||||
* 提供します。
|
||||
*
|
||||
* 次の手順で使用してください。
|
||||
* 1. 「ピクチャの表示」を実行して、ボタン画像を表示します。
|
||||
* 2. プラグインコマンド「ボタンピクチャの設定」を呼び出します。
|
||||
*
|
||||
* @command set
|
||||
* @text ボタンピクチャの設定
|
||||
* @desc 指定したピクチャをクリック可能にします。
|
||||
*
|
||||
* @arg pictureId
|
||||
* @type number
|
||||
* @min 1
|
||||
* @max 100
|
||||
* @default 1
|
||||
* @text ピクチャ番号
|
||||
* @desc ピクチャの管理番号です。
|
||||
*
|
||||
* @arg commonEventId
|
||||
* @type common_event
|
||||
* @default 1
|
||||
* @text コモンイベント
|
||||
* @desc ピクチャがクリックされた時に呼び出すコモンイベントです。
|
||||
*/
|
||||
|
||||
(() => {
|
||||
const pluginName = "ButtonPicture";
|
||||
|
||||
PluginManager.registerCommand(pluginName, "set", (args) => {
|
||||
const pictureId = Number(args.pictureId);
|
||||
const commonEventId = Number(args.commonEventId);
|
||||
const picture = $gameScreen.picture(pictureId);
|
||||
if (picture) {
|
||||
picture.mzkp_commonEventId = commonEventId;
|
||||
}
|
||||
});
|
||||
|
||||
Sprite_Picture.prototype.isClickEnabled = function () {
|
||||
const picture = this.picture();
|
||||
return picture && picture.mzkp_commonEventId && !$gameMessage.isBusy();
|
||||
};
|
||||
|
||||
Sprite_Picture.prototype.onClick = function () {
|
||||
$gameTemp.reserveCommonEvent(this.picture().mzkp_commonEventId);
|
||||
};
|
||||
|
||||
Spriteset_Base.prototype.mzkp_isAnyPicturePressed = function () {
|
||||
return this._pictureContainer.children.some((sprite) => sprite.isPressed());
|
||||
};
|
||||
|
||||
const _Scene_Map_isAnyButtonPressed = Scene_Map.prototype.isAnyButtonPressed;
|
||||
Scene_Map.prototype.isAnyButtonPressed = function () {
|
||||
return (
|
||||
_Scene_Map_isAnyButtonPressed.apply(this, arguments) ||
|
||||
this._spriteset.mzkp_isAnyPicturePressed()
|
||||
);
|
||||
};
|
||||
})();
|
||||
305
js/plugins/CustomizeConfigDefault.js
Normal file
305
js/plugins/CustomizeConfigDefault.js
Normal file
|
|
@ -0,0 +1,305 @@
|
|||
//=============================================================================
|
||||
// CustomizeConfigDefault.js
|
||||
// ----------------------------------------------------------------------------
|
||||
// (C)2015 Triacontane
|
||||
// This plugin is released under the MIT License.
|
||||
// http://opensource.org/licenses/mit-license.php
|
||||
// ----------------------------------------------------------------------------
|
||||
// Version
|
||||
// 1.2.2 2021/12/22 1.2.1の修正でローカル実行時にデフォルト値が反映されなくなる問題を修正
|
||||
// 1.2.1 2021/12/21 アツマール等Webにあげたときにオプションのデフォルト値が反映されない問題を修正
|
||||
// 1.2.0 2021/03/01 MZで動作するよう修正、リファクタリング
|
||||
// 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
|
||||
* @target MZ
|
||||
* @url https://github.com/triacontane/RPGMakerMV/tree/mz_master/CustomizeConfigDefault.js
|
||||
* @base PluginCommonBase
|
||||
* @author triacontane
|
||||
*
|
||||
* @param AlwaysDash
|
||||
* @desc Always dash(ON/OFF)
|
||||
* @default false
|
||||
* @type boolean
|
||||
*
|
||||
* @param CommandRemember
|
||||
* @desc Command remember(ON/OFF)
|
||||
* @default false
|
||||
* @type boolean
|
||||
*
|
||||
* @param TouchUi
|
||||
* @desc Touch UI(ON/OFF)
|
||||
* @default true
|
||||
* @type boolean
|
||||
*
|
||||
* @param BgmVolume
|
||||
* @desc BGM Volume(0-100)
|
||||
* @default 100
|
||||
* @max 100
|
||||
* @type number
|
||||
*
|
||||
* @param BgsVolume
|
||||
* @desc BGS Volume(0-100)
|
||||
* @default 100
|
||||
* @max 100
|
||||
* @type number
|
||||
*
|
||||
* @param MeVolume
|
||||
* @desc ME Volume(0-100)
|
||||
* @default 100
|
||||
* @max 100
|
||||
* @type number
|
||||
*
|
||||
* @param SeVolume
|
||||
* @desc SE Volume(0-100)
|
||||
* @default 100
|
||||
* @max 100
|
||||
* @type number
|
||||
*
|
||||
* @param EraseAlwaysDash
|
||||
* @desc Erase AlwaysDash Option(ON/OFF)
|
||||
* @default false
|
||||
* @type boolean
|
||||
*
|
||||
* @param EraseCommandRemember
|
||||
* @desc Erase CommandRemember Option(ON/OFF)
|
||||
* @default false
|
||||
* @type boolean
|
||||
*
|
||||
* @param EraseTouchUi
|
||||
* @desc Erase TouchUI Option(ON/OFF)
|
||||
* @default false
|
||||
* @type boolean
|
||||
*
|
||||
* @param EraseBgmVolume
|
||||
* @desc Erase BgmVolume Option(ON/OFF)
|
||||
* @default false
|
||||
* @type boolean
|
||||
*
|
||||
* @param EraseBgsVolume
|
||||
* @desc Erase BgsVolume Option(ON/OFF)
|
||||
* @default false
|
||||
* @type boolean
|
||||
*
|
||||
* @param EraseMeVolume
|
||||
* @desc Erase MeVolume Option(ON/OFF)
|
||||
* @default false
|
||||
* @type boolean
|
||||
*
|
||||
* @param EraseSeVolume
|
||||
* @desc Erase SeVolume Option(ON/OFF)
|
||||
* @default false
|
||||
* @type boolean
|
||||
*
|
||||
* @help Setting default value for Options.
|
||||
*
|
||||
* This plugin is released under the MIT License.
|
||||
*/
|
||||
/*:ja
|
||||
* @plugindesc オプションデフォルト値設定プラグイン
|
||||
* @target MZ
|
||||
* @url https://github.com/triacontane/RPGMakerMV/tree/mz_master/CustomizeConfigDefault.js
|
||||
* @base PluginCommonBase
|
||||
* @author トリアコンタン
|
||||
*
|
||||
* @param AlwaysDash
|
||||
* @text 常時ダッシュ
|
||||
* @desc 常にダッシュする。(Shiftキーを押している場合のみ歩行)(ON/OFF)
|
||||
* @default false
|
||||
* @type boolean
|
||||
*
|
||||
* @param CommandRemember
|
||||
* @text コマンド記憶
|
||||
* @desc 選択したコマンドを記憶する。(ON/OFF)
|
||||
* @default false
|
||||
* @type boolean
|
||||
*
|
||||
* @param TouchUi
|
||||
* @text タッチUi
|
||||
* @desc タッチ用のボタン等をメニュー画面に表示する。(ON/OFF)
|
||||
* @default true
|
||||
* @type boolean
|
||||
*
|
||||
* @param BgmVolume
|
||||
* @text BGM音量
|
||||
* @desc BGMの音量。0-100
|
||||
* @default 100
|
||||
* @max 100
|
||||
* @type number
|
||||
*
|
||||
* @param BgsVolume
|
||||
* @text BGS音量
|
||||
* @desc BGSの音量。0-100
|
||||
* @default 100
|
||||
* @max 100
|
||||
* @type number
|
||||
*
|
||||
* @param MeVolume
|
||||
* @text ME音量
|
||||
* @desc MEの音量。0-100
|
||||
* @default 100
|
||||
* @max 100
|
||||
* @type number
|
||||
*
|
||||
* @param SeVolume
|
||||
* @text SE音量
|
||||
* @desc SEの音量。0-100
|
||||
* @default 100
|
||||
* @max 100
|
||||
* @type number
|
||||
*
|
||||
* @param EraseAlwaysDash
|
||||
* @text 常時ダッシュ消去
|
||||
* @desc 常時ダッシュの項目を非表示にする。(ON/OFF)
|
||||
* @default false
|
||||
* @type boolean
|
||||
*
|
||||
* @param EraseCommandRemember
|
||||
* @text コマンド記憶消去
|
||||
* @desc コマンド記憶の項目を非表示にする。(ON/OFF)
|
||||
* @default false
|
||||
* @type boolean
|
||||
*
|
||||
* @param EraseTouchUi
|
||||
* @text タッチUI消去
|
||||
* @desc タッチUIの項目を非表示にする。(ON/OFF)
|
||||
* @default false
|
||||
* @type boolean
|
||||
*
|
||||
* @param EraseBgmVolume
|
||||
* @text BGM音量消去
|
||||
* @desc BGM音量の項目を非表示にする。(ON/OFF)
|
||||
* @default false
|
||||
* @type boolean
|
||||
*
|
||||
* @param EraseBgsVolume
|
||||
* @text BGS音量消去
|
||||
* @desc BGS音量の項目を非表示にする。(ON/OFF)
|
||||
* @default false
|
||||
* @type boolean
|
||||
*
|
||||
* @param EraseMeVolume
|
||||
* @text ME音量消去
|
||||
* @desc ME音量の項目を非表示にする。(ON/OFF)
|
||||
* @default false
|
||||
* @type boolean
|
||||
*
|
||||
* @param EraseSeVolume
|
||||
* @text SE音量消去
|
||||
* @desc SE音量の項目を非表示にする。(ON/OFF)
|
||||
* @default false
|
||||
* @type boolean
|
||||
*
|
||||
* @help オプション画面で設定可能な項目のデフォルト値を指定した値に変更します。
|
||||
* 例えば、初回から常時ダッシュをONにしておけば
|
||||
* プレイヤーが設定を変更する手間を省くことができます。
|
||||
* この処理はconfig.rpgsaveが未作成の場合にのみ実行されます。
|
||||
*
|
||||
* また、項目そのものを消去することもできます。
|
||||
* 例えば、戦闘がないゲームでは「コマンド記憶」等は不要なので消去できます。
|
||||
*
|
||||
* このプラグインにはプラグインコマンドはありません。
|
||||
*
|
||||
* 利用規約:
|
||||
* 作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)
|
||||
* についても制限はありません。
|
||||
* このプラグインはもうあなたのものです。
|
||||
*/
|
||||
(() => {
|
||||
"use strict";
|
||||
const script = document.currentScript;
|
||||
const param = PluginManagerEx.createParameter(script);
|
||||
|
||||
//=============================================================================
|
||||
// ConfigManager
|
||||
// それぞれの項目に初期値を与えます。
|
||||
//=============================================================================
|
||||
const _ConfigManager_load = ConfigManager.load;
|
||||
ConfigManager.load = function () {
|
||||
this.applyDefault(); // For local.
|
||||
_ConfigManager_load.apply(this, arguments);
|
||||
};
|
||||
|
||||
const _ConfigManager_applyData = ConfigManager.applyData;
|
||||
ConfigManager.applyData = function (config) {
|
||||
_ConfigManager_applyData.apply(this, arguments);
|
||||
if (Object.keys(config).length === 0) {
|
||||
this.applyDefault(); // For browser.
|
||||
}
|
||||
};
|
||||
|
||||
ConfigManager.applyDefault = function () {
|
||||
this.alwaysDash = param.AlwaysDash;
|
||||
this.commandRemember = param.CommandRemember;
|
||||
this.touchUI = param.TouchUi;
|
||||
this.bgmVolume = param.BgmVolume;
|
||||
this.bgsVolume = param.BgsVolume;
|
||||
this.meVolume = param.MeVolume;
|
||||
this.seVolume = param.SeVolume;
|
||||
};
|
||||
|
||||
//=============================================================================
|
||||
// Scene_Options
|
||||
// オプションウィンドウの高さを調整します。
|
||||
//=============================================================================
|
||||
const _Scene_Options_maxCommands = Scene_Options.prototype.maxCommands;
|
||||
Scene_Options.prototype.maxCommands = function () {
|
||||
let count = _Scene_Options_maxCommands.apply(this, arguments);
|
||||
if (param.EraseAlwaysDash) count--;
|
||||
if (param.EraseCommandRemember) count--;
|
||||
if (param.EraseTouchUi) count--;
|
||||
if (param.EraseBgmVolume) count--;
|
||||
if (param.EraseBgsVolume) count--;
|
||||
if (param.EraseMeVolume) count--;
|
||||
if (param.EraseSeVolume) count--;
|
||||
return count;
|
||||
};
|
||||
|
||||
//=============================================================================
|
||||
// Window_Options
|
||||
// パラメータを空白にした項目を除去します。
|
||||
//=============================================================================
|
||||
const _Window_Options_makeCommandList =
|
||||
Window_Options.prototype.makeCommandList;
|
||||
Window_Options.prototype.makeCommandList = function () {
|
||||
_Window_Options_makeCommandList.apply(this, arguments);
|
||||
if (param.EraseAlwaysDash) this.eraseOption("alwaysDash");
|
||||
if (param.EraseCommandRemember) this.eraseOption("commandRemember");
|
||||
if (param.EraseTouchUi) this.eraseOption("touchUI");
|
||||
if (param.EraseBgmVolume) this.eraseOption("bgmVolume");
|
||||
if (param.EraseBgsVolume) this.eraseOption("bgsVolume");
|
||||
if (param.EraseMeVolume) this.eraseOption("meVolume");
|
||||
if (param.EraseSeVolume) this.eraseOption("seVolume");
|
||||
};
|
||||
|
||||
Window_Options.prototype.eraseOption = function (symbol) {
|
||||
for (let 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;
|
||||
}
|
||||
};
|
||||
})();
|
||||
852
js/plugins/MakeScreenCapture.js
Normal file
852
js/plugins/MakeScreenCapture.js
Normal file
|
|
@ -0,0 +1,852 @@
|
|||
//=============================================================================
|
||||
// MakeScreenCapture.js
|
||||
// ----------------------------------------------------------------------------
|
||||
// (C)2015-2018 Triacontane
|
||||
// This software is released under the MIT License.
|
||||
// http://opensource.org/licenses/mit-license.php
|
||||
// ----------------------------------------------------------------------------
|
||||
// Version
|
||||
// 1.8.0 2021/09/24 署名に制御文字\v[n]を使えるよう修正
|
||||
// 1.7.4 2021/05/16 プラグインコマンドがMZ対応できていなかったので修正
|
||||
// 1.7.3 2018/06/28 出力パスの算出方法を変更
|
||||
// 1.7.2 2018/03/06 各種ファンクションキーにCtrlおよびAltの同時押し要否の設定を追加しました。
|
||||
// 1.7.1 2017/11/11 総合開発支援プラグインとの連携による修正
|
||||
// 1.7.0 2017/08/13 パラメータの型指定機能に対応
|
||||
// 1.6.0 2016/12/25 jpg保存時の拡張子を「jpeg」→「jpg」に変更
|
||||
// jpeg品質をパラメータから指定できる機能を追加
|
||||
// 1.5.0 2016/10/20 本体バージョン1.3.2でエラーが発生していたのを修正
|
||||
// 1.4.0 2016/10/06 パラメータに環境変数を使えるように修正
|
||||
// 1.3.0 2016/06/24 WEBP形式のショートカットキーを追加
|
||||
// 1.2.3 2016/06/23 著名に画像とテキストを両方使えるよう修正
|
||||
// 1.2.2 2016/05/13 プラグインコマンドから出力したときに拡張子の表示がおかしくなる問題を修正
|
||||
// 1.2.1 2016/05/11 定期実行キャプチャを行ったときに拡張子の表示がおかしくなる問題を修正
|
||||
// 1.2.0 2016/04/23 署名に任意の画像ファイルを利用できるようになりました。
|
||||
// 細部のリファクタリング
|
||||
// 1.1.5 2016/04/10 画像の出力先を管理画面のパラメータとして設定できるよう修正
|
||||
// 1.1.4 2016/03/31 画像の出力先を絶対パスで指定できるよう修正
|
||||
// 1.1.3 2016/03/15 文章のスクロール表示が正しくキャプチャできない問題を修正
|
||||
// 1.1.2 2016/03/01 pngとjpegの形式ごとのファンクションキーを割り当てるよう修正
|
||||
// 1.1.1 2016/02/26 PrintScreenでもキャプチャできるように修正
|
||||
// 1.1.0 2016/02/25 複数のウィンドウを含む画面で正しくキャプチャできない不具合を修正
|
||||
// 高度な設定項目の追加
|
||||
// 1.0.0 2016/02/24 初版
|
||||
// ----------------------------------------------------------------------------
|
||||
// [Blog] : https://triacontane.blogspot.jp/
|
||||
// [Twitter]: https://twitter.com/triacontane/
|
||||
// [GitHub] : https://github.com/triacontane/
|
||||
//=============================================================================
|
||||
|
||||
/*:
|
||||
* @plugindesc Screen Capture Plugin
|
||||
* @target MZ
|
||||
* @url https://github.com/triacontane/RPGMakerMV/tree/mz_master/MakeScreenCapture.js
|
||||
* @base PluginCommonBase
|
||||
* @orderAfter PluginCommonBase
|
||||
* @author triacontane
|
||||
*
|
||||
* @param FuncKeyPngCapture
|
||||
* @desc キャプチャとファイル保存を行うファンクションキーです。
|
||||
* 保存形式の設定にかかわらずpng形式で出力します。
|
||||
* @default F6
|
||||
* @type select
|
||||
* @option none
|
||||
* @option F1
|
||||
* @option F2
|
||||
* @option F3
|
||||
* @option F4
|
||||
* @option F5
|
||||
* @option F6
|
||||
* @option F7
|
||||
* @option F8
|
||||
* @option F9
|
||||
* @option F10
|
||||
* @option F11
|
||||
* @option F12
|
||||
*
|
||||
* @param FuncKeyJpegCapture
|
||||
* @desc キャプチャとファイル保存を行うファンクションキーです。
|
||||
* 保存形式の設定にかかわらずjpeg形式で出力します。
|
||||
* @default F7
|
||||
* @type select
|
||||
* @option none
|
||||
* @option F1
|
||||
* @option F2
|
||||
* @option F3
|
||||
* @option F4
|
||||
* @option F5
|
||||
* @option F6
|
||||
* @option F7
|
||||
* @option F8
|
||||
* @option F9
|
||||
* @option F10
|
||||
* @option F11
|
||||
* @option F12
|
||||
*
|
||||
* @param FuncKeyWebpCapture
|
||||
* @desc キャプチャとファイル保存を行うファンクションキーです。
|
||||
* 保存形式の設定にかかわらずwebp形式で出力します。
|
||||
* @default
|
||||
* @type select
|
||||
* @option none
|
||||
* @option F1
|
||||
* @option F2
|
||||
* @option F3
|
||||
* @option F4
|
||||
* @option F5
|
||||
* @option F6
|
||||
* @option F7
|
||||
* @option F8
|
||||
* @option F9
|
||||
* @option F10
|
||||
* @option F11
|
||||
* @option F12
|
||||
*
|
||||
* @param SimultaneousCtrl
|
||||
* @desc 各機能を利用する際にCtrlキーの同時押しが必要かどうかです。他のプラグインと対象キーが競合する場合に利用します。
|
||||
* @default false
|
||||
* @type boolean
|
||||
*
|
||||
* @param SimultaneousAlt
|
||||
* @desc 各機能を利用する際にAltキーの同時押しが必要かどうかです。他のプラグインと対象キーが競合する場合に利用します。
|
||||
* @default false
|
||||
* @type boolean
|
||||
*
|
||||
* @param FileName
|
||||
* @desc 画像のファイル名です。
|
||||
* プラグインコマンドから実行した場合は参照されません。
|
||||
* @default image
|
||||
*
|
||||
* @param Location
|
||||
* @desc ファイルの出力パスです。相対パス、絶対パスが利用できます。
|
||||
* 区切り文字は「/」もしくは「\」で指定してください。
|
||||
* @default captures
|
||||
*
|
||||
* @param FileFormat
|
||||
* @desc 画像のデフォルト保存形式です。(png/jpeg/webp)
|
||||
* @default png
|
||||
* @type select
|
||||
* @option png
|
||||
* @option jpeg
|
||||
* @option webp
|
||||
*
|
||||
* @param NumberDigit
|
||||
* @desc キャプチャファイルの連番桁数です。
|
||||
* @default 2
|
||||
* @type number
|
||||
*
|
||||
* @param TimeStamp
|
||||
* @desc ONにすると連番の代わりにタイムスタンプを付与します。(ON/OFF)
|
||||
* @default true
|
||||
* @type boolean
|
||||
*
|
||||
* @param Signature
|
||||
* @desc 保存時に画像の右下に書き込まれる署名です。
|
||||
* @default
|
||||
*
|
||||
* @param SignatureSize
|
||||
* @desc 署名のフォントサイズです。
|
||||
* @default 22
|
||||
* @type number
|
||||
*
|
||||
* @param SignatureImage
|
||||
* @desc 保存時に画像の右下に書き込まれる著名画像ファイル名です。「img/pictures」に配置。拡張子不要。
|
||||
* @default
|
||||
* @require 1
|
||||
* @dir img/pictures/
|
||||
* @type file
|
||||
*
|
||||
* @param Interval
|
||||
* @desc キャプチャを定期実行する間隔(秒単位)です。
|
||||
* 0にすると、定期キャプチャを行いません。
|
||||
* @default 0
|
||||
* @type number
|
||||
*
|
||||
* @param SeName
|
||||
* @desc キャプチャ実行時に演奏する効果音のファイル名です。
|
||||
* @default
|
||||
* @require 1
|
||||
* @dir audio/se/
|
||||
* @type file
|
||||
*
|
||||
* @param JpegQuality
|
||||
* @desc JPEG出力したときの品質です。値を小さくすると容量も小さくなります。(1...10)
|
||||
* @default 9
|
||||
* @type number
|
||||
* @min 1
|
||||
* @max 10
|
||||
*
|
||||
* @command MAKE
|
||||
* @text キャプチャ作成
|
||||
* @desc 実行時点でのキャプチャを作成してメモリ上に保持します。
|
||||
*
|
||||
* @command OUT_PICTURE
|
||||
* @text ピクチャ出力
|
||||
* @desc 保持していた画面キャプチャをピクチャに表示します。コマンドの直後に「ピクチャの表示」を実行してください。
|
||||
*
|
||||
* @command OUT_FILE
|
||||
* @text ファイル作成
|
||||
* @desc 保持していた画面キャプチャをファイルに保存します。ローカル実行でのみ動作します。
|
||||
*
|
||||
* @arg name
|
||||
* @text ファイル名
|
||||
* @desc 出力するファイルの名称です。
|
||||
* @default capture
|
||||
*
|
||||
* @help プレー中のゲーム画面をキャプチャして
|
||||
* ファイルに保存したり、ピクチャとして表示したりできます。
|
||||
* キャプチャは以下のタイミングで実行されます。
|
||||
*
|
||||
* ・ファンクションキー or PrintScreen押下
|
||||
* ・一定時間ごと
|
||||
* ・プラグインコマンド実行時
|
||||
*
|
||||
* プラグインコマンド以外は、テストプレー時のみ有効になります。
|
||||
*
|
||||
* キャプチャしたファイルの保存場所は絶対パス、相対パスいずれも指定できるほか、
|
||||
* OSの環境変数(%USERPROFILE%など)にも対応しています。
|
||||
*
|
||||
* また、キャプチャの際に著名を自動で埋め込むことができます。
|
||||
* 著名は文字列で指定できるほか、任意の画像も指定可能です。
|
||||
* (両方指定すると画像が優先されます)
|
||||
*
|
||||
* 注意!
|
||||
* キャプチャピクチャの表示状態はセーブできません。
|
||||
* セーブされる前に「ピクチャの消去」で消去してください。
|
||||
*
|
||||
* 注意!
|
||||
* キャプチャを出力する機能はローカル環境でのみ有効です。
|
||||
* ブラウザやスマホ上では動作しません。
|
||||
*
|
||||
* このプラグインの利用にはベースプラグイン『PluginCommonBase.js』が必要です。
|
||||
* 『PluginCommonBase.js』は、RPGツクールMZのインストールフォルダ配下の
|
||||
* 以下のフォルダに格納されています。
|
||||
* dlc/BasicResources/plugins/official
|
||||
*
|
||||
* This plugin is released under the MIT License.
|
||||
*/
|
||||
/*:ja
|
||||
* @plugindesc 画面キャプチャ管理プラグイン
|
||||
* @target MZ
|
||||
* @url https://github.com/triacontane/RPGMakerMV/tree/mz_master/MakeScreenCapture.js
|
||||
* @base PluginCommonBase
|
||||
* @orderAfter PluginCommonBase
|
||||
* @author トリアコンタン
|
||||
*
|
||||
* @param PNGキャプチャキー
|
||||
* @desc キャプチャとファイル保存を行うファンクションキーです。
|
||||
* 保存形式の設定にかかわらずpng形式で出力します。
|
||||
* @default F6
|
||||
* @type select
|
||||
* @option none
|
||||
* @option F1
|
||||
* @option F2
|
||||
* @option F3
|
||||
* @option F4
|
||||
* @option F5
|
||||
* @option F6
|
||||
* @option F7
|
||||
* @option F8
|
||||
* @option F9
|
||||
* @option F10
|
||||
* @option F11
|
||||
* @option F12
|
||||
*
|
||||
* @param JPEGキャプチャキー
|
||||
* @desc キャプチャとファイル保存を行うファンクションキーです。
|
||||
* 保存形式の設定にかかわらずjpeg形式で出力します。
|
||||
* @default F7
|
||||
* @type select
|
||||
* @option none
|
||||
* @option F1
|
||||
* @option F2
|
||||
* @option F3
|
||||
* @option F4
|
||||
* @option F5
|
||||
* @option F6
|
||||
* @option F7
|
||||
* @option F8
|
||||
* @option F9
|
||||
* @option F10
|
||||
* @option F11
|
||||
* @option F12
|
||||
*
|
||||
* @param WEBPキャプチャキー
|
||||
* @desc キャプチャとファイル保存を行うファンクションキーです。
|
||||
* 保存形式の設定にかかわらずwebp形式で出力します。
|
||||
* @default F9
|
||||
* @type select
|
||||
* @option none
|
||||
* @option F1
|
||||
* @option F2
|
||||
* @option F3
|
||||
* @option F4
|
||||
* @option F5
|
||||
* @option F6
|
||||
* @option F7
|
||||
* @option F8
|
||||
* @option F9
|
||||
* @option F10
|
||||
* @option F11
|
||||
* @option F12
|
||||
*
|
||||
* @param Ctrl同時押し
|
||||
* @desc 各機能を利用する際にCtrlキーの同時押しが必要かどうかです。他のプラグインと対象キーが競合する場合に利用します。
|
||||
* @default false
|
||||
* @type boolean
|
||||
*
|
||||
* @param Alt同時押し
|
||||
* @desc 各機能を利用する際にAltキーの同時押しが必要かどうかです。他のプラグインと対象キーが競合する場合に利用します。
|
||||
* @default false
|
||||
* @type boolean
|
||||
*
|
||||
* @param ファイル名
|
||||
* @desc 画像のファイル名です。
|
||||
* プラグインコマンドから実行した場合は参照されません。
|
||||
* @default image
|
||||
*
|
||||
* @param 出力場所
|
||||
* @desc ファイルの出力パスです。相対パス、絶対パスが利用できます。
|
||||
* 区切り文字は「/」もしくは「\」で指定してください。
|
||||
* @default captures
|
||||
*
|
||||
* @param 保存形式
|
||||
* @desc 画像のデフォルト保存形式です。(png/jpeg/webp)
|
||||
* @default png
|
||||
* @type select
|
||||
* @option png
|
||||
* @option jpeg
|
||||
* @option webp
|
||||
*
|
||||
* @param 連番桁数
|
||||
* @desc キャプチャファイルの連番桁数です。数値はゲーム実行の度に初期化されるのでご注意ください。
|
||||
* @default 2
|
||||
* @type number
|
||||
*
|
||||
* @param タイムスタンプ
|
||||
* @desc ONにすると連番の代わりにタイムスタンプを付与します。(ON/OFF)
|
||||
* @default true
|
||||
* @type boolean
|
||||
*
|
||||
* @param 署名
|
||||
* @desc 保存時に画像の右下に書き込まれる署名です。
|
||||
* @default
|
||||
*
|
||||
* @param 署名サイズ
|
||||
* @desc 署名のフォントサイズです。
|
||||
* @default 22
|
||||
* @type number
|
||||
*
|
||||
* @param 署名画像
|
||||
* @desc 保存時に画像の右下に書き込まれる著名画像ファイル名です。「img/pictures」に配置。拡張子不要。
|
||||
* @default
|
||||
* @require 1
|
||||
* @dir img/pictures/
|
||||
* @type file
|
||||
*
|
||||
* @param 実行間隔
|
||||
* @desc キャプチャを定期実行する間隔(秒単位)です。
|
||||
* 0にすると、定期キャプチャを行いません。
|
||||
* @default 0
|
||||
* @type number
|
||||
*
|
||||
* @param 効果音
|
||||
* @desc キャプチャ実行時に演奏する効果音のファイル名です。
|
||||
* @default
|
||||
* @require 1
|
||||
* @dir audio/se/
|
||||
* @type file
|
||||
*
|
||||
* @param JPEG品質
|
||||
* @desc JPEG出力したときの品質です。値を小さくすると容量も小さくなります。(1...10)
|
||||
* @default 9
|
||||
* @type number
|
||||
* @min 1
|
||||
* @max 10
|
||||
*
|
||||
* @command MAKE
|
||||
* @text キャプチャ作成
|
||||
* @desc 実行時点でのキャプチャを作成してメモリ上に保持します。
|
||||
*
|
||||
* @command OUT_PICTURE
|
||||
* @text ピクチャ出力
|
||||
* @desc 保持していた画面キャプチャをピクチャに表示します。コマンドの直後に「ピクチャの表示」を実行してください。
|
||||
*
|
||||
* @command OUT_FILE
|
||||
* @text ファイル作成
|
||||
* @desc 保持していた画面キャプチャをファイルに保存します。ローカル実行でのみ動作します。
|
||||
*
|
||||
* @arg name
|
||||
* @text ファイル名
|
||||
* @desc 出力するファイルの名称です。
|
||||
* @default capture
|
||||
*
|
||||
* @help プレー中のゲーム画面をキャプチャして
|
||||
* ファイルに保存したり、ピクチャとして表示したりできます。
|
||||
* キャプチャは以下のタイミングで実行されます。
|
||||
*
|
||||
* ・ファンクションキー or PrintScreen押下
|
||||
* ・一定時間ごと
|
||||
* ・プラグインコマンド実行時
|
||||
*
|
||||
* プラグインコマンド以外は、テストプレー時のみ有効になります。
|
||||
*
|
||||
* キャプチャしたファイルの保存場所は絶対パス、相対パスいずれも指定できるほか、
|
||||
* OSの環境変数(%USERPROFILE%など)にも対応しています。
|
||||
*
|
||||
* また、キャプチャの際に著名を自動で埋め込むことができます。
|
||||
* 著名は文字列で指定できるほか、任意の画像も指定可能です。
|
||||
* (両方指定すると画像が優先されます)
|
||||
*
|
||||
* 注意!
|
||||
* キャプチャピクチャの表示状態はセーブできません。
|
||||
* セーブされる前に「ピクチャの消去」で消去してください。
|
||||
*
|
||||
* 注意!
|
||||
* キャプチャを出力する機能はローカル環境でのみ有効です。
|
||||
* ブラウザやスマホ上では動作しません。
|
||||
*
|
||||
* このプラグインの利用にはベースプラグイン『PluginCommonBase.js』が必要です。
|
||||
* 『PluginCommonBase.js』は、RPGツクールMZのインストールフォルダ配下の
|
||||
* 以下のフォルダに格納されています。
|
||||
* dlc/BasicResources/plugins/official
|
||||
*
|
||||
* 利用規約:
|
||||
* 作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)
|
||||
* についても制限はありません。
|
||||
* このプラグインはもうあなたのものです。
|
||||
*/
|
||||
|
||||
(() => {
|
||||
"use strict";
|
||||
const script = document.currentScript;
|
||||
|
||||
PluginManagerEx.registerCommand(script, "MAKE", (args) => {
|
||||
SceneManager.makeCapture();
|
||||
});
|
||||
|
||||
PluginManagerEx.registerCommand(script, "OUT_PICTURE", (args) => {
|
||||
$gameScreen.captureFlg = true;
|
||||
});
|
||||
|
||||
PluginManagerEx.registerCommand(script, "OUT_FILE", (args) => {
|
||||
SceneManager.saveCapture(
|
||||
String(args.name) || paramFileName,
|
||||
paramFileFormat
|
||||
);
|
||||
});
|
||||
|
||||
//=============================================================================
|
||||
// ユーザ書き換え領域 - 開始 -
|
||||
// 高度な設定を記述しています。必要な場合は書き換えてください。
|
||||
//=============================================================================
|
||||
const settings = {
|
||||
/* 署名のフォント情報です。faceはあらかじめフォントをロードしておかなければ使えません */
|
||||
signature: {
|
||||
face: "GameFont",
|
||||
color: "rgba(255,255,255,1.0)",
|
||||
align: "right",
|
||||
},
|
||||
/* 効果音情報です。ファイル名はプラグイン管理画面から取得します */
|
||||
se: { volume: 90, pitch: 100, pan: 0 },
|
||||
/* テストプレー以外での動作を無効にするフラグです */
|
||||
testOnly: true,
|
||||
};
|
||||
//=============================================================================
|
||||
// ユーザ書き換え領域 - 終了 -
|
||||
//=============================================================================
|
||||
const pluginName = "MakeScreenCapture";
|
||||
|
||||
const getParamString = function (paramNames) {
|
||||
const value = getParamOther(paramNames);
|
||||
return value == null ? "" : value;
|
||||
};
|
||||
|
||||
const getParamNumber = function (paramNames, min, max) {
|
||||
const value = getParamOther(paramNames);
|
||||
if (arguments.length < 2) min = -Infinity;
|
||||
if (arguments.length < 3) max = Infinity;
|
||||
return (parseInt(value, 10) || 0).clamp(min, max);
|
||||
};
|
||||
|
||||
const getParamBoolean = function (paramNames) {
|
||||
const value = getParamOther(paramNames);
|
||||
return (
|
||||
(value || "").toUpperCase() === "ON" ||
|
||||
(value || "").toUpperCase() === "TRUE"
|
||||
);
|
||||
};
|
||||
|
||||
const getParamOther = function (paramNames) {
|
||||
if (!Array.isArray(paramNames)) paramNames = [paramNames];
|
||||
for (let i = 0; i < paramNames.length; i++) {
|
||||
const name = PluginManager.parameters(pluginName)[paramNames[i]];
|
||||
if (name) return Utils.isNwjs() ? convertEnvironmentVariable(name) : name;
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
const getCommandName = function (command) {
|
||||
return (command || "").toUpperCase();
|
||||
};
|
||||
|
||||
const getArgString = function (arg, upperFlg) {
|
||||
arg = convertEscapeCharacters(arg);
|
||||
return upperFlg ? arg.toUpperCase() : arg;
|
||||
};
|
||||
|
||||
const convertEnvironmentVariable = function (text) {
|
||||
if (text == null) text = "";
|
||||
text = text.replace(
|
||||
/%(\w+)%/gi,
|
||||
function () {
|
||||
return process.env[arguments[1]] || "";
|
||||
}.bind(this)
|
||||
);
|
||||
return text;
|
||||
};
|
||||
|
||||
const convertEscapeCharacters = function (text) {
|
||||
if (text == null) text = "";
|
||||
const window = SceneManager._scene._windowLayer.children[0];
|
||||
return window ? window.convertEscapeCharacters(text) : text;
|
||||
};
|
||||
|
||||
//=============================================================================
|
||||
// パラメータの取得と整形
|
||||
//=============================================================================
|
||||
const paramFuncKeyPngCapture = getParamString([
|
||||
"FuncKeyPngCapture",
|
||||
"PNGキャプチャキー",
|
||||
]);
|
||||
const paramFuncKeyJpegCapture = getParamString([
|
||||
"FuncKeyJpegCapture",
|
||||
"JPEGキャプチャキー",
|
||||
]);
|
||||
const paramFuncKeyWebpCapture = getParamString([
|
||||
"FuncKeyWebpCapture",
|
||||
"WEBPキャプチャキー",
|
||||
]);
|
||||
const paramFileName = getParamString(["FileName", "ファイル名"]);
|
||||
const paramLocation = getParamString(["Location", "出力場所"]);
|
||||
const paramFileFormat = getParamString([
|
||||
"FileFormat",
|
||||
"保存形式",
|
||||
]).toLowerCase();
|
||||
const paramSignature = getParamString(["Signature", "署名"]);
|
||||
const paramSignatureImage = getParamString(["SignatureImage", "署名画像"]);
|
||||
const paramSignatureSize = getParamNumber(["SignatureSize", "署名サイズ"]);
|
||||
const paramNumberDigit = getParamNumber(["NumberDigit", "連番桁数"]);
|
||||
const paramInterval = getParamNumber(["Interval", "実行間隔"]);
|
||||
const paramSeName = getParamString(["SeName", "効果音"]);
|
||||
const paramTimeStamp = getParamBoolean(["TimeStamp", "タイムスタンプ"]);
|
||||
const paramJpegQuality = getParamNumber(["JpegQuality", "JPEG品質"]);
|
||||
const paramSimultaneousCtrl = getParamBoolean([
|
||||
"SimultaneousCtrl",
|
||||
"Ctrl同時押し",
|
||||
]);
|
||||
const paramSimultaneousAlt = getParamBoolean([
|
||||
"SimultaneousAlt",
|
||||
"Alt同時押し",
|
||||
]);
|
||||
|
||||
//=============================================================================
|
||||
// Game_Screen
|
||||
// キャプチャピクチャ用のプロパティを追加定義します。
|
||||
//=============================================================================
|
||||
const _Game_Screen_clear = Game_Screen.prototype.clear;
|
||||
Game_Screen.prototype.clear = function () {
|
||||
_Game_Screen_clear.apply(this, arguments);
|
||||
this.clearCapturePicture();
|
||||
};
|
||||
|
||||
Game_Screen.prototype.clearCapturePicture = function () {
|
||||
this.captureFlg = false;
|
||||
};
|
||||
|
||||
//=============================================================================
|
||||
// Game_Picture
|
||||
// キャプチャピクチャ用のプロパティを追加定義します。
|
||||
//=============================================================================
|
||||
const _Game_Picture_show = Game_Picture.prototype.show;
|
||||
Game_Picture.prototype.show = function (
|
||||
name,
|
||||
origin,
|
||||
x,
|
||||
y,
|
||||
scaleX,
|
||||
scaleY,
|
||||
opacity,
|
||||
blendMode
|
||||
) {
|
||||
if ($gameScreen.captureFlg) {
|
||||
arguments[0] = Date.now().toString();
|
||||
this.captureFlg = true;
|
||||
} else {
|
||||
this.captureFlg = null;
|
||||
}
|
||||
$gameScreen.clearCapturePicture();
|
||||
_Game_Picture_show.apply(this, arguments);
|
||||
};
|
||||
|
||||
//=============================================================================
|
||||
// Scene_Base
|
||||
// 定期実行キャプチャを定義します。
|
||||
//=============================================================================
|
||||
const _Scene_Base_update = Scene_Base.prototype.update;
|
||||
Scene_Base.prototype.update = function () {
|
||||
_Scene_Base_update.apply(this, arguments);
|
||||
const count = Graphics.frameCount;
|
||||
if (
|
||||
paramInterval !== 0 &&
|
||||
Utils.isTestCapture() &&
|
||||
(count + 1) % (paramInterval * 60) === 0
|
||||
) {
|
||||
SceneManager.takeCapture();
|
||||
}
|
||||
};
|
||||
|
||||
//=============================================================================
|
||||
// Sprite_Picture
|
||||
// 画像の動的生成を追加定義します。
|
||||
//=============================================================================
|
||||
const _Sprite_Picture_loadBitmap = Sprite_Picture.prototype.loadBitmap;
|
||||
Sprite_Picture.prototype.loadBitmap = function () {
|
||||
if (this.picture().captureFlg) {
|
||||
this.bitmap = SceneManager.getCapture();
|
||||
} else {
|
||||
_Sprite_Picture_loadBitmap.apply(this, arguments);
|
||||
}
|
||||
};
|
||||
|
||||
//=============================================================================
|
||||
// Utils
|
||||
// テスト用のキャプチャを許可するかどうかを返します。
|
||||
//=============================================================================
|
||||
Utils.isTestCapture = function () {
|
||||
return !settings.testOnly || Utils.isOptionValid("test");
|
||||
};
|
||||
|
||||
//=============================================================================
|
||||
// Bitmap
|
||||
// 対象のビットマップを保存します。現状、ローカル環境下でのみ動作します。
|
||||
//=============================================================================
|
||||
Bitmap.prototype.save = function (fileName, format, extend) {
|
||||
let data = this._canvas.toDataURL("image/" + format, extend);
|
||||
data = data.replace(/^.*,/, "");
|
||||
if (format === "jpeg") format = "jpg";
|
||||
if (data) StorageManager.saveImg(fileName, format, data);
|
||||
};
|
||||
|
||||
Bitmap.prototype.sign = function (text, fontInfo) {
|
||||
this.fontFace = fontInfo.face;
|
||||
this.fontSize = fontInfo.size;
|
||||
this.textColor = fontInfo.color;
|
||||
this.drawText(
|
||||
text,
|
||||
8,
|
||||
this.height - this.fontSize - 8,
|
||||
this.width - 8 * 2,
|
||||
this.fontSize,
|
||||
fontInfo.align
|
||||
);
|
||||
};
|
||||
|
||||
Bitmap.prototype.signAndSave = function (
|
||||
signature,
|
||||
fileName,
|
||||
format,
|
||||
signatureImage
|
||||
) {
|
||||
const fileFullPath = StorageManager.getLocalImgFileName(fileName);
|
||||
if (signatureImage) {
|
||||
this.signImage(signatureImage, signature);
|
||||
}
|
||||
this.sign(
|
||||
PluginManagerEx.convertEscapeCharacters(paramSignature),
|
||||
signature
|
||||
);
|
||||
this.save(
|
||||
fileFullPath,
|
||||
format,
|
||||
format === "jpeg" ? paramJpegQuality / 10 : undefined
|
||||
);
|
||||
};
|
||||
|
||||
Bitmap.prototype.signImage = function (signBitmap, fontInfo) {
|
||||
let dx = 0,
|
||||
dy = this.height - signBitmap.height;
|
||||
switch (fontInfo.align) {
|
||||
case "center":
|
||||
dx = this.width / 2 - signBitmap.width / 2;
|
||||
break;
|
||||
case "right":
|
||||
dx = this.width - signBitmap.width;
|
||||
break;
|
||||
}
|
||||
this.blt(signBitmap, 0, 0, signBitmap.width, signBitmap.height, dx, dy);
|
||||
};
|
||||
|
||||
//=============================================================================
|
||||
// Input
|
||||
// ファンクションキーのマップを定義します。
|
||||
//=============================================================================
|
||||
Input.functionReverseMapper = {
|
||||
F1: 112,
|
||||
F2: 113,
|
||||
F3: 114,
|
||||
F4: 115,
|
||||
F5: 116,
|
||||
F6: 117,
|
||||
F7: 118,
|
||||
F8: 119,
|
||||
F9: 120,
|
||||
F10: 121,
|
||||
F11: 122,
|
||||
F12: 123,
|
||||
};
|
||||
|
||||
//=============================================================================
|
||||
// SceneManager
|
||||
// ファンクションキーが押下されたときにキャプチャを実行します。
|
||||
//=============================================================================
|
||||
SceneManager.captureNumber = 0;
|
||||
SceneManager.makeCapture = function () {
|
||||
if (paramSeName) {
|
||||
const se = settings.se;
|
||||
se.name = paramSeName;
|
||||
AudioManager.playSe(se);
|
||||
}
|
||||
this._captureBitmap = this.snap();
|
||||
};
|
||||
|
||||
SceneManager.getCapture = function () {
|
||||
return this._captureBitmap || ImageManager.loadBitmap("", "");
|
||||
};
|
||||
|
||||
SceneManager.saveCapture = function (fileName, format) {
|
||||
if (!this._captureBitmap) return;
|
||||
const signature = this.getSignature();
|
||||
if (paramSignatureImage) {
|
||||
const image = ImageManager.loadPicture(paramSignatureImage, 0);
|
||||
image.addLoadListener(
|
||||
function () {
|
||||
this._captureBitmap.signAndSave(signature, fileName, format, image);
|
||||
}.bind(this)
|
||||
);
|
||||
} else {
|
||||
this._captureBitmap.signAndSave(signature, fileName, format, null);
|
||||
}
|
||||
};
|
||||
|
||||
SceneManager.getSignature = function () {
|
||||
const signature = settings.signature;
|
||||
signature.size = paramSignatureSize;
|
||||
return signature;
|
||||
};
|
||||
|
||||
SceneManager.takeCapture = function (format) {
|
||||
if (!format) {
|
||||
format = paramFileFormat;
|
||||
}
|
||||
this.makeCapture();
|
||||
this.saveCapture(paramFileName, format);
|
||||
};
|
||||
|
||||
const _SceneManager_setupErrorHandlers = SceneManager.setupErrorHandlers;
|
||||
SceneManager.setupErrorHandlers = function () {
|
||||
_SceneManager_setupErrorHandlers.apply(this, arguments);
|
||||
if (Utils.isTestCapture()) {
|
||||
document.addEventListener("keyup", this.onKeyUpForCapture.bind(this));
|
||||
}
|
||||
};
|
||||
|
||||
const _SceneManager_onKeyDown = SceneManager.onKeyDown;
|
||||
SceneManager.onKeyDown = function (event) {
|
||||
_SceneManager_onKeyDown.apply(this, arguments);
|
||||
if (
|
||||
paramSimultaneousCtrl === event.ctrlKey &&
|
||||
paramSimultaneousAlt === event.altKey &&
|
||||
Utils.isTestCapture()
|
||||
) {
|
||||
this.onKeyDownForCapture(event);
|
||||
}
|
||||
};
|
||||
|
||||
SceneManager.onKeyDownForCapture = function (event) {
|
||||
switch (event.keyCode) {
|
||||
case Input.functionReverseMapper[paramFuncKeyPngCapture]:
|
||||
SceneManager.takeCapture("png");
|
||||
break;
|
||||
case Input.functionReverseMapper[paramFuncKeyJpegCapture]:
|
||||
SceneManager.takeCapture("jpeg");
|
||||
break;
|
||||
case Input.functionReverseMapper[paramFuncKeyWebpCapture]:
|
||||
SceneManager.takeCapture("webp");
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
SceneManager.onKeyUpForCapture = function (event) {
|
||||
// PrintScreen
|
||||
if (event.keyCode === 44) SceneManager.takeCapture();
|
||||
};
|
||||
|
||||
//=============================================================================
|
||||
// StorageManager
|
||||
// イメージファイルを保存します。
|
||||
//=============================================================================
|
||||
StorageManager.saveImg = function (fileName, format, data) {
|
||||
if (this.isLocalMode()) {
|
||||
this.saveImgToLocalFile(fileName + "." + format, data);
|
||||
} else {
|
||||
this.saveImgToWebStorage(fileName, data);
|
||||
}
|
||||
};
|
||||
|
||||
StorageManager.saveImgToWebStorage = function (fileName, data) {
|
||||
localStorage.setItem(fileName, data);
|
||||
};
|
||||
|
||||
StorageManager.saveImgToLocalFile = function (fileName, data) {
|
||||
const fs = require("fs");
|
||||
const dirPath = this.localImgFileDirectoryPath();
|
||||
const filePath = dirPath + fileName;
|
||||
if (!fs.existsSync(dirPath)) {
|
||||
fs.mkdirSync(dirPath);
|
||||
}
|
||||
fs.writeFileSync(filePath, new Buffer(data, "base64"));
|
||||
};
|
||||
|
||||
StorageManager.localImgFileDirectoryPath = function () {
|
||||
let filePath = paramLocation;
|
||||
if (!filePath.match(/^[A-Z]:/)) {
|
||||
const path = require("path");
|
||||
filePath = path.join(path.dirname(process.mainModule.filename), filePath);
|
||||
}
|
||||
return decodeURIComponent(
|
||||
filePath.match(/\/$/) ? filePath : filePath + "/"
|
||||
);
|
||||
};
|
||||
|
||||
StorageManager.getLocalImgFileName = function (fileName) {
|
||||
if (paramTimeStamp) {
|
||||
const date = new Date();
|
||||
return (
|
||||
fileName +
|
||||
"_" +
|
||||
date.getFullYear() +
|
||||
(date.getMonth() + 1).padZero(2) +
|
||||
date.getDate().padZero(2) +
|
||||
"_" +
|
||||
date.getHours().padZero(2) +
|
||||
date.getMinutes().padZero(2) +
|
||||
date.getSeconds().padZero(2)
|
||||
);
|
||||
} else {
|
||||
let number = SceneManager.captureNumber;
|
||||
if (number >= Math.pow(10, paramNumberDigit)) number = 0;
|
||||
SceneManager.captureNumber = number + 1;
|
||||
return fileName + (number > 0 ? number.padZero(paramNumberDigit) : "");
|
||||
}
|
||||
};
|
||||
})();
|
||||
424
js/plugins/MakeScreenMovie.js
Normal file
424
js/plugins/MakeScreenMovie.js
Normal file
|
|
@ -0,0 +1,424 @@
|
|||
/*=============================================================================
|
||||
MakeScreenMovie.js
|
||||
----------------------------------------------------------------------------
|
||||
(C)2019 Triacontane
|
||||
This software is released under the MIT License.
|
||||
http://opensource.org/licenses/mit-license.php
|
||||
----------------------------------------------------------------------------
|
||||
Version
|
||||
1.1.1 2020/10/17 ヘルプ修正
|
||||
1.1.0 2020/10/16 テストプレー以外でも使えるよう修正
|
||||
録画したファイル名を変数に格納する機能を追加
|
||||
録画乱れを防止するパラメータを追加
|
||||
1.0.1 2020/10/13 MZで動作するよう修正
|
||||
1.0.0 2019/01/05 初版
|
||||
----------------------------------------------------------------------------
|
||||
[Blog] : https://triacontane.blogspot.jp/
|
||||
[Twitter]: https://twitter.com/triacontane/
|
||||
[GitHub] : https://github.com/triacontane/
|
||||
=============================================================================*/
|
||||
|
||||
/*:
|
||||
* @plugindesc ゲーム動画作成プラグイン
|
||||
* @target MZ
|
||||
* @url https://github.com/triacontane/RPGMakerMV/tree/mz_master/MakeScreenMovie.js
|
||||
* @base PluginCommonBase
|
||||
* @author トリアコンタン
|
||||
*
|
||||
* @param FunkKeyRecord
|
||||
* @text 録画ファンクションキー
|
||||
* @desc ゲーム画面の録画と停止を行うキーです。
|
||||
* @default F10
|
||||
* @type select
|
||||
* @option none
|
||||
* @option F1
|
||||
* @option F2
|
||||
* @option F3
|
||||
* @option F4
|
||||
* @option F5
|
||||
* @option F6
|
||||
* @option F7
|
||||
* @option F8
|
||||
* @option F9
|
||||
* @option F10
|
||||
* @option F11
|
||||
* @option F12
|
||||
*
|
||||
* @param RecordSwitchId
|
||||
* @text 録画スイッチ番号
|
||||
* @desc 指定したスイッチがONになると自動で録画を開始します。
|
||||
* @default 0
|
||||
* @type switch
|
||||
*
|
||||
* @param FileName
|
||||
* @text ファイル名
|
||||
* @desc 作成した動画のファイル名です。制御文字\V[n]が使えるほか、\Dで日付文字列に変換できます。
|
||||
* @default movie_\d
|
||||
*
|
||||
* @param Location
|
||||
* @text 保存場所
|
||||
* @desc ファイルの出力パスです。相対パス、絶対パスが利用できます。
|
||||
* 区切り文字は「/」もしくは「\」で指定してください。
|
||||
* @default movies
|
||||
*
|
||||
* @param IncludeAudio
|
||||
* @text 音声を含める
|
||||
* @desc 録画した動画に音声データを含めるかどうかを選択できます。
|
||||
* @default true
|
||||
* @type boolean
|
||||
*
|
||||
* @param MovieFileVariableId
|
||||
* @text 動画ファイル名の格納変数
|
||||
* @desc 録画した動画ファイル名称文字列が格納される変数です。
|
||||
* @default 0
|
||||
* @type variable
|
||||
*
|
||||
* @param TestOnly
|
||||
* @text テストプレー時のみ有効
|
||||
* @desc プラグインの機能がテストプレー時のみ有効になります。
|
||||
* @default true
|
||||
* @type boolean
|
||||
*
|
||||
* @param PreventRecordingDisruption
|
||||
* @text 録画乱れ防止
|
||||
* @desc メッセージ表示中に稀に発生する録画乱れを防止できますが、メッセージが一瞬で表示されます。
|
||||
* @default true
|
||||
* @type boolean
|
||||
*
|
||||
* @param MimeType
|
||||
* @text MIMEタイプ
|
||||
* @desc 生成する動画のMIMEタイプです。通常は自動で問題ありません。サポート外の規格を選択すると自動選択されます。
|
||||
* @default 自動
|
||||
* @type select
|
||||
* @option 自動
|
||||
* @option video/webm;codecs=vp9
|
||||
* @option video/webm;codecs=vp8
|
||||
* @option video/webm;codecs=h264
|
||||
* @option video/webm
|
||||
*
|
||||
* @param RefreshRate
|
||||
* @text リフレッシュレート
|
||||
* @desc 動画のリフレッシュレートです。-1で自動設定、0で静止画になります。動画が不安定になる場合は下げてください。
|
||||
* @default 30
|
||||
* @type number
|
||||
* @min -1
|
||||
* @max 120
|
||||
*
|
||||
* @help MakeScreenMovie.js
|
||||
*
|
||||
* ゲーム画面を録画してwebm形式で保存できます。
|
||||
* 指定したファンクションキーを押すか、スイッチがONになると録画開始します。
|
||||
* もう一度ファンクションキーを押すか、スイッチがOFFになると録画終了します。
|
||||
* ファイル名や保存場所、音声を含めるかどうかを設定できます。
|
||||
*
|
||||
* 注意!
|
||||
* 録画中「●REC」と表示されますが、実際の動画には含まれません。
|
||||
* このプラグインはローカル実行(Game.exe)でのみ動作します。
|
||||
* あまりに長時間の録画は動作が不安定になる場合があります。
|
||||
* 現バージョンでは録画した動画にまれに映像乱れが生じる場合があります。
|
||||
* (パラメータから抑止可能)
|
||||
*
|
||||
* ・参考にした記事
|
||||
* https://qiita.com/ru_shalm/items/0930aedad12c4e100446
|
||||
*
|
||||
* ・スクリプト
|
||||
* 最後に録画した動画ファイルのフルパスを取得します。
|
||||
* StorageManager.getLatestMovieFilePath();
|
||||
*
|
||||
* このプラグインの利用にはベースプラグイン『PluginCommonBase.js』が必要です。
|
||||
* 『PluginCommonBase.js』は、RPGツクールMZのインストールフォルダ配下の
|
||||
* 以下のフォルダに格納されています。
|
||||
* dlc/BasicResources/plugins/official
|
||||
*
|
||||
* We will create an English version when it works well.
|
||||
*
|
||||
* 利用規約:
|
||||
* 作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)
|
||||
* についても制限はありません。
|
||||
* このプラグインはもうあなたのものです。
|
||||
*/
|
||||
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
if (!Utils.isNwjs()) {
|
||||
console.error("MakeScreenMovie.js: This plugin use only Game.exe");
|
||||
return;
|
||||
}
|
||||
|
||||
const script = document.currentScript;
|
||||
const param = PluginManagerEx.createParameter(script);
|
||||
|
||||
if (param.TestOnly && !Utils.isOptionValid("test")) {
|
||||
return;
|
||||
}
|
||||
|
||||
const MIME_TYPES = [
|
||||
"video/webm;codecs=vp9",
|
||||
"video/webm;codecs=vp8",
|
||||
"video/webm;codecs=h264",
|
||||
"video/webm",
|
||||
];
|
||||
|
||||
/**
|
||||
* 画面を録画状態を管理するクラス
|
||||
*/
|
||||
class ScreenRecorder {
|
||||
constructor() {
|
||||
this._recorder = null;
|
||||
if (!this.getMimeType()) {
|
||||
this._disable = true;
|
||||
console.warn("MakeScreenMovie.js: Supported Mime type not found.");
|
||||
}
|
||||
}
|
||||
|
||||
_start() {
|
||||
if (this._disable) {
|
||||
return;
|
||||
}
|
||||
this._stream = param.IncludeAudio
|
||||
? this._createStream()
|
||||
: this._createCanvasStream();
|
||||
const recorder = new MediaRecorder(this._stream, {
|
||||
mimeType: this.getMimeType(),
|
||||
});
|
||||
this._chunks = [];
|
||||
recorder.addEventListener("dataavailable", (event) =>
|
||||
this._chunks.push(event.data)
|
||||
);
|
||||
recorder.addEventListener("stop", this._save.bind(this));
|
||||
recorder.start(1000);
|
||||
Graphics.showRecSign();
|
||||
this._recorder = recorder;
|
||||
}
|
||||
|
||||
_stop() {
|
||||
this._recorder.stop();
|
||||
this._stream.getTracks().forEach((track) => track.stop());
|
||||
this._recorder = null;
|
||||
this._stream = null;
|
||||
}
|
||||
|
||||
_save() {
|
||||
const blob = new Blob(this._chunks, { type: this.getMimeType() });
|
||||
const reader = new FileReader();
|
||||
reader.addEventListener("load", () => {
|
||||
Graphics.hideRecSign();
|
||||
StorageManager.saveMovieToLocalFile(new Buffer(reader.result));
|
||||
});
|
||||
reader.readAsArrayBuffer(blob);
|
||||
this._chunks = null;
|
||||
}
|
||||
|
||||
_createStream() {
|
||||
const tracks = this._createCanvasStream()
|
||||
.getVideoTracks()
|
||||
.concat(WebAudio.createStream().getAudioTracks());
|
||||
return new MediaStream(tracks);
|
||||
}
|
||||
|
||||
_createCanvasStream() {
|
||||
if (param.RefreshRate >= 0) {
|
||||
return document
|
||||
.querySelector("canvas")
|
||||
.captureStream(param.RefreshRate);
|
||||
} else {
|
||||
return document.querySelector("canvas").captureStream();
|
||||
}
|
||||
}
|
||||
|
||||
toggle() {
|
||||
if (!this.isRecording()) {
|
||||
this._start();
|
||||
} else {
|
||||
this._stop();
|
||||
}
|
||||
}
|
||||
|
||||
update() {
|
||||
const switchId = param.RecordSwitchId;
|
||||
if ($gameSwitches.value(switchId) && !this.isRecording()) {
|
||||
this._start();
|
||||
} else if (!$gameSwitches.value(switchId) && this.isRecording()) {
|
||||
this._stop();
|
||||
}
|
||||
}
|
||||
|
||||
isRecording() {
|
||||
return !!this._recorder;
|
||||
}
|
||||
|
||||
getMimeType() {
|
||||
if (MediaRecorder.isTypeSupported(param.MimeType)) {
|
||||
return param.MimeType;
|
||||
} else {
|
||||
return MIME_TYPES.filter(MediaRecorder.isTypeSupported)[0];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Game_Switches
|
||||
* スイッチに連動してレコーダーを更新します。
|
||||
*/
|
||||
const _Game_Switches_setValue = Game_Switches.prototype.setValue;
|
||||
Game_Switches.prototype.setValue = function (variableId, value) {
|
||||
_Game_Switches_setValue.apply(this, arguments);
|
||||
if (variableId === param.RecordSwitchId) {
|
||||
SceneManager.updateRecorder();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* SceneManager
|
||||
* ScreenRecorderを生成、管理します。
|
||||
*/
|
||||
const _SceneManager_initialize = SceneManager.initialize;
|
||||
SceneManager.initialize = function () {
|
||||
_SceneManager_initialize.apply(this, arguments);
|
||||
this._screenRecorder = new ScreenRecorder();
|
||||
};
|
||||
|
||||
const _SceneManager_onKeyDown = SceneManager.onKeyDown;
|
||||
SceneManager.onKeyDown = function (event) {
|
||||
_SceneManager_onKeyDown.apply(this, arguments);
|
||||
this.onKeyDownForScreenMovie(event);
|
||||
};
|
||||
|
||||
SceneManager.onKeyDownForScreenMovie = function (event) {
|
||||
if (event.key === param.FunkKeyRecord) {
|
||||
this._screenRecorder.toggle();
|
||||
}
|
||||
};
|
||||
|
||||
SceneManager.updateRecorder = function () {
|
||||
this._screenRecorder.update();
|
||||
};
|
||||
|
||||
SceneManager.isScreenRecording = function () {
|
||||
return this._screenRecorder.isRecording();
|
||||
};
|
||||
|
||||
/**
|
||||
* StorageManager
|
||||
* 作成した動画ファイルを保存します。
|
||||
*/
|
||||
StorageManager.saveMovieToLocalFile = function (dataBuffer) {
|
||||
const fs = require("fs");
|
||||
const dirPath = StorageManager.localMovieFileDirectoryPath();
|
||||
if (!fs.existsSync(dirPath)) {
|
||||
fs.mkdirSync(dirPath);
|
||||
}
|
||||
const fileName = this.getMovieFileName();
|
||||
const filePath = dirPath + fileName + ".webm";
|
||||
this.saveMovieFileName(fileName);
|
||||
fs.writeFileSync(filePath, dataBuffer);
|
||||
};
|
||||
|
||||
StorageManager.saveMovieFileName = function (fileName) {
|
||||
this._movieFilePath = fileName;
|
||||
if (param.MovieFileVariableId) {
|
||||
$gameVariables.setValue(param.MovieFileVariableId, fileName);
|
||||
}
|
||||
};
|
||||
|
||||
StorageManager.localMovieFileDirectoryPath = function () {
|
||||
let filePath = param.Location;
|
||||
if (!filePath.match(/^[A-Z]:/)) {
|
||||
const path = require("path");
|
||||
filePath = path.join(path.dirname(process.mainModule.filename), filePath);
|
||||
}
|
||||
return filePath.match(/\/$/) ? filePath : filePath + "/";
|
||||
};
|
||||
|
||||
StorageManager.getMovieFileName = function () {
|
||||
const tmpText = param.FileName.replace(/\\V\[(\d+)]/gi, () => {
|
||||
return $gameVariables
|
||||
? $gameVariables.value(parseInt(arguments[1]))
|
||||
: "0";
|
||||
});
|
||||
return tmpText.replace(/\\D/gi, this.getTimeText);
|
||||
};
|
||||
|
||||
StorageManager.getLatestMovieFilePath = function () {
|
||||
return this._movieFilePath || "";
|
||||
};
|
||||
|
||||
StorageManager.getTimeText = function () {
|
||||
const d = new Date();
|
||||
return (
|
||||
`${d.getFullYear()}-${(d.getMonth() + 1).padZero(2)}-${d
|
||||
.getDate()
|
||||
.padZero(2)}` +
|
||||
`_${d.getHours().padZero(2)}${d.getMinutes().padZero(2)}${d
|
||||
.getSeconds()
|
||||
.padZero(2)}`
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
* Graphics
|
||||
* 録画中のサインを表示します。
|
||||
*/
|
||||
Graphics.showRecSign = function () {
|
||||
if (this._recSign) {
|
||||
this._recSign.style.opacity = "1";
|
||||
}
|
||||
};
|
||||
|
||||
Graphics.hideRecSign = function () {
|
||||
if (this._recSign) {
|
||||
this._recSign.style.opacity = "0";
|
||||
}
|
||||
};
|
||||
|
||||
const _Graphics__createAllElements = Graphics._createAllElements;
|
||||
Graphics._createAllElements = function () {
|
||||
_Graphics__createAllElements.apply(this, arguments);
|
||||
this._createRecPrinter();
|
||||
};
|
||||
|
||||
Graphics._createRecPrinter = function () {
|
||||
const text = document.createElement("div");
|
||||
text.id = "recSign";
|
||||
text.style.position = "absolute";
|
||||
text.style.left = "8px";
|
||||
text.style.top = "8px";
|
||||
text.style.width = "300px";
|
||||
text.style.fontSize = "40px";
|
||||
text.style.fontFamily = "monospace";
|
||||
text.style.color = "red";
|
||||
text.style.textAlign = "left";
|
||||
text.style.textShadow = "1px 1px 0 rgba(0,0,0,0.5)";
|
||||
text.innerHTML = "●REC";
|
||||
text.style.zIndex = "9";
|
||||
text.style.opacity = "0";
|
||||
document.body.appendChild(text);
|
||||
this._recSign = text;
|
||||
};
|
||||
|
||||
/**
|
||||
* WebAudio
|
||||
* ストリームを生成して返します。
|
||||
*/
|
||||
WebAudio.createStream = function () {
|
||||
const audioContext = this._context;
|
||||
const audioNode = this._masterGainNode;
|
||||
const destination = audioContext.createMediaStreamDestination();
|
||||
audioNode.connect(destination);
|
||||
const oscillator = audioContext.createOscillator();
|
||||
oscillator.connect(destination);
|
||||
return destination.stream;
|
||||
};
|
||||
|
||||
if (param.PreventRecordingDisruption) {
|
||||
const _Window_Message_updateShowFast =
|
||||
Window_Message.prototype.updateShowFast;
|
||||
Window_Message.prototype.updateShowFast = function () {
|
||||
_Window_Message_updateShowFast.apply(this, arguments);
|
||||
if (SceneManager.isScreenRecording()) {
|
||||
this._showFast = true;
|
||||
}
|
||||
};
|
||||
}
|
||||
})();
|
||||
1049
js/plugins/MessageSkip.js
Normal file
1049
js/plugins/MessageSkip.js
Normal file
File diff suppressed because it is too large
Load diff
413
js/plugins/MessageWindowHidden.js
Normal file
413
js/plugins/MessageWindowHidden.js
Normal file
|
|
@ -0,0 +1,413 @@
|
|||
//=============================================================================
|
||||
// MessageWindowHidden.js
|
||||
// ----------------------------------------------------------------------------
|
||||
// (C)2015 Triacontane
|
||||
// This software is released under the MIT License.
|
||||
// http://opensource.org/licenses/mit-license.php
|
||||
// ----------------------------------------------------------------------------
|
||||
// Version
|
||||
// 2.7.0 2021/01/25 ウィンドウ消去時、決定動作によってウィンドウを再表示できる設定を追加(by unaunagiさま)
|
||||
// 2.6.2 2020/09/02 MZ向けにコード修正
|
||||
// 2.6.1 2020/05/21 トリガースイッチと連動無効スイッチの状態によってエラーが起きうる記述を修正
|
||||
// 2.6.0 2020/05/20 ピクチャの連動を無効にできるスイッチを追加
|
||||
// 2.5.1 2020/05/19 2.3.0の仕様変更で連動表示ピクチャの透明度が復元できない問題を修正
|
||||
// 2.5.0 2020/05/17 指定したスイッチに連動させてウィンドウの表示/非表示を切り替える機能を追加
|
||||
// 2.4.0 2020/05/08 選択肢表示中でもウィンドウを隠せるよう設定を追加
|
||||
// 2.3.0 2019/10/22 ウィンドウを表示状態にもどしたとき、連動ピクチャは、もともと表示していた不透明度を復元するよう仕様変更
|
||||
// 2.2.0 2019/06/09 メッセージウィンドウと逆に連動して指定したピクチャの表示/非表示が自動で切り替わる機能を追加
|
||||
// 2.1.0 2018/10/10 戦闘中にプラグインを無効化できる機能を追加。
|
||||
// 2.0.0 2018/03/31 消去するトリガーを複数指定できる機能を追加。パラメータの指定方法を見直し。
|
||||
// 1.4.0 2018/03/10 指定したスイッチがONの間はウィンドウ消去を無効化できる機能を追加
|
||||
// 1.3.2 2017/08/02 ponidog_BackLog_utf8.jsとの競合を解消
|
||||
// 1.3.1 2017/07/03 古いYEP_MessageCore.jsのネーム表示ウィンドウが再表示できない不具合の修正(by DarkPlasmaさま)
|
||||
// 1.3.0 2017/03/16 連動して非表示にできるピクチャを複数指定できる機能を追加
|
||||
// 1.2.1 2017/02/07 端末依存の記述を削除
|
||||
// 1.2.0 2016/01/02 メッセージウィンドウと連動して指定したピクチャの表示/非表示が自動で切り替わる機能を追加
|
||||
// 1.1.0 2016/08/25 選択肢の表示中はウィンドウを非表示にできないよう仕様変更
|
||||
// 1.0.4 2016/07/22 YEP_MessageCore.jsのネーム表示ウィンドウと連携する機能を追加
|
||||
// 1.0.3 2016/01/24 メッセージウィンドウが表示されていないときも非表示にできてしまう現象の修正
|
||||
// 1.0.2 2016/01/02 競合対策
|
||||
// 1.0.1 2015/12/31 コメント追加+英語対応(仕様に変化なし)
|
||||
// 1.0.0 2015/12/30 初版
|
||||
// ----------------------------------------------------------------------------
|
||||
// [Blog] : https://triacontane.blogspot.jp/
|
||||
// [Twitter]: https://twitter.com/triacontane/
|
||||
// [GitHub] : https://github.com/triacontane/
|
||||
//=============================================================================
|
||||
|
||||
/*:
|
||||
* @plugindesc Erase message window
|
||||
* @target MZ
|
||||
* @url https://github.com/triacontane/RPGMakerMV/tree/mz_master/MessageWindowHidden.js
|
||||
* @author triacontane
|
||||
*
|
||||
* @param triggerButton
|
||||
* @desc Trigger buttons
|
||||
* (light_click or shift or control)
|
||||
* @default ["light_click"]
|
||||
* @type combo[]
|
||||
* @option light_click
|
||||
* @option shift
|
||||
* @option control
|
||||
* @option tab
|
||||
* @option pageup
|
||||
* @option pagedown
|
||||
* @option debug
|
||||
*
|
||||
* @param triggerSwitch
|
||||
* @desc The window will be erased in conjunction with the specified switch.
|
||||
* @default 0
|
||||
* @type switch
|
||||
*
|
||||
* @param linkPictureNumbers
|
||||
* @desc Picture number of window show/hide
|
||||
* @default []
|
||||
* @type number[]
|
||||
*
|
||||
* @param linkShowPictureNumbers
|
||||
* @desc Picture number of window show/hide
|
||||
* @default []
|
||||
* @type number[]
|
||||
*
|
||||
* @param disableLinkSwitchId
|
||||
* @desc 指定した番号のスイッチがONのとき、ピクチャの連動が無効になります。
|
||||
* @default 0
|
||||
* @type switch
|
||||
*
|
||||
* @param disableSwitchId
|
||||
* @desc 指定した番号のスイッチがONのとき、プラグインの機能が無効になります。
|
||||
* @default 0
|
||||
* @type switch
|
||||
*
|
||||
* @param disableInBattle
|
||||
* @desc trueのとき、戦闘中にプラグインの機能を無効にします。
|
||||
* @default false
|
||||
* @type boolean
|
||||
*
|
||||
* @param disableInChoice
|
||||
* @desc 選択肢の表示中はウィンドウを非表示にできなくなります。
|
||||
* @default true
|
||||
* @type boolean
|
||||
*
|
||||
* @param restoreByDecision
|
||||
* @desc メッセージ消去時、決定動作により非表示になっていたメッセージウィンドウを再表示できます。
|
||||
* @default false
|
||||
* @type boolean
|
||||
*
|
||||
* @help Erase message window (and restore) when triggered
|
||||
*
|
||||
* This plugin is released under the MIT License.
|
||||
*/
|
||||
/*:ja
|
||||
* @plugindesc メッセージウィンドウ一時消去プラグイン
|
||||
* @target MZ
|
||||
* @url https://github.com/triacontane/RPGMakerMV/tree/mz_master/MessageWindowHidden.js
|
||||
* @author トリアコンタン
|
||||
*
|
||||
* @param triggerButton
|
||||
* @text ボタン名称
|
||||
* @desc ウィンドウを消去するボタンです。(複数登録可能) プラグイン等で入力可能なボタンを追加した場合は直接入力
|
||||
* @default ["右クリック"]
|
||||
* @type combo[]
|
||||
* @option 右クリック
|
||||
* @option shift
|
||||
* @option control
|
||||
* @option tab
|
||||
* @option pageup
|
||||
* @option pagedown
|
||||
* @option debug
|
||||
*
|
||||
* @param triggerSwitch
|
||||
* @text トリガースイッチ
|
||||
* @desc 指定したスイッチに連動させてウィンドウを消去します。並列処理などを使ってON/OFFを適切に管理してください。
|
||||
* @default 0
|
||||
* @type switch
|
||||
*
|
||||
* @param linkPictureNumbers
|
||||
* @text 連動ピクチャ番号
|
||||
* @desc ウィンドウ消去時に連動して不透明度を[0]にするピクチャの番号です。
|
||||
* @default []
|
||||
* @type number[]
|
||||
*
|
||||
* @param linkShowPictureNumbers
|
||||
* @text 連動表示ピクチャ番号
|
||||
* @desc ウィンドウ消去時に連動して不透明度を[255]にするピクチャの番号です。
|
||||
* @default []
|
||||
* @type number[]
|
||||
*
|
||||
* @param disableLinkSwitchId
|
||||
* @text 連動ピクチャ無効スイッチ
|
||||
* @desc 指定した番号のスイッチがONのとき、ピクチャの連動が無効になります。
|
||||
* @default 0
|
||||
* @type switch
|
||||
*
|
||||
* @param disableSwitchId
|
||||
* @text 無効スイッチ
|
||||
* @desc 指定した番号のスイッチがONのとき、プラグイン全体の機能が無効になります。
|
||||
* @default 0
|
||||
* @type switch
|
||||
*
|
||||
* @param disableInBattle
|
||||
* @text 戦闘中無効化
|
||||
* @desc trueのとき、戦闘中にプラグインの機能を無効にします。
|
||||
* @default false
|
||||
* @type boolean
|
||||
*
|
||||
* @param disableInChoice
|
||||
* @text 選択肢表示中は無効
|
||||
* @desc 選択肢の表示中はウィンドウを非表示にできなくなります。
|
||||
* @default true
|
||||
* @type boolean
|
||||
*
|
||||
* @param restoreByDecision
|
||||
* @text 決定動作で復帰
|
||||
* @desc メッセージ消去時、決定動作により非表示になっていたメッセージウィンドウを再表示できます。
|
||||
* @default false
|
||||
* @type boolean
|
||||
*
|
||||
* @help メッセージウィンドウを表示中に指定したボタンを押下することで
|
||||
* メッセージウィンドウを消去します。もう一度押すと戻ります。
|
||||
*
|
||||
* ウィンドウ消去時に連動して不透明度を[0]にするピクチャを指定することができます。
|
||||
* 背景に特定のピクチャを使用している場合などに指定してください。
|
||||
* 再表示すると不透明度は、ウィンドウ非表示まえの不透明度で復元されます。
|
||||
*
|
||||
* ver2.0.0よりパラメータの指定方法が一部変更になりました。
|
||||
* 以前のバージョンを使っていた方は再設定をお願いします。
|
||||
*
|
||||
* このプラグインにはプラグインコマンドはありません。
|
||||
*
|
||||
* 利用規約:
|
||||
* 作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)
|
||||
* についても制限はありません。
|
||||
* このプラグインはもうあなたのものです。
|
||||
*/
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
/**
|
||||
* Create plugin parameter. param[paramName] ex. param.commandPrefix
|
||||
* @param pluginName plugin name(EncounterSwitchConditions)
|
||||
* @returns {Object} Created parameter
|
||||
*/
|
||||
var createPluginParameter = function (pluginName) {
|
||||
var paramReplacer = function (key, value) {
|
||||
if (value === "null") {
|
||||
return value;
|
||||
}
|
||||
if (value[0] === '"' && value[value.length - 1] === '"') {
|
||||
return value;
|
||||
}
|
||||
try {
|
||||
return JSON.parse(value);
|
||||
} catch (e) {
|
||||
return value;
|
||||
}
|
||||
};
|
||||
var parameter = JSON.parse(
|
||||
JSON.stringify(PluginManager.parameters(pluginName), paramReplacer)
|
||||
);
|
||||
PluginManager.setParameters(pluginName, parameter);
|
||||
return parameter;
|
||||
};
|
||||
var param = createPluginParameter("MessageWindowHidden");
|
||||
|
||||
//=============================================================================
|
||||
// Game_Picture
|
||||
// メッセージウィンドウの表示可否と連動します。
|
||||
//=============================================================================
|
||||
Game_Picture.prototype.linkWithMessageWindow = function (opacity) {
|
||||
this._opacity = opacity;
|
||||
this._targetOpacity = opacity;
|
||||
};
|
||||
|
||||
//=============================================================================
|
||||
// Window_Message
|
||||
// 指定されたボタン押下時にウィンドウとサブウィンドウを非表示にします。
|
||||
//=============================================================================
|
||||
var _Window_Message_updateWait = Window_Message.prototype.updateWait;
|
||||
Window_Message.prototype.updateWait = function () {
|
||||
if (
|
||||
!this.isClosed() &&
|
||||
this.isTriggeredHidden() &&
|
||||
this.isEnableInChoice()
|
||||
) {
|
||||
if (!this.isHidden()) {
|
||||
this.hideAllWindow();
|
||||
} else {
|
||||
this.showAllWindow();
|
||||
}
|
||||
} else if (
|
||||
this.isHidden() &&
|
||||
this.isTriggered() &&
|
||||
param.restoreByDecision
|
||||
) {
|
||||
this.showAllWindow();
|
||||
Input.update();
|
||||
}
|
||||
var wait = _Window_Message_updateWait.apply(this, arguments);
|
||||
if (this.isHidden() && this.visible) {
|
||||
this.hideAllWindow();
|
||||
}
|
||||
return wait;
|
||||
};
|
||||
|
||||
Window_Message.prototype.isEnableInChoice = function () {
|
||||
return !(param.disableInChoice && $gameMessage.isChoice());
|
||||
};
|
||||
|
||||
Window_Message.prototype.hideAllWindow = function () {
|
||||
this.hide();
|
||||
this.subWindows().forEach(
|
||||
function (subWindow) {
|
||||
this.hideSubWindow(subWindow);
|
||||
}.bind(this)
|
||||
);
|
||||
this._originalPictureOpacities = {};
|
||||
this.linkPictures(0, param.linkPictureNumbers);
|
||||
this.linkPictures(255, param.linkShowPictureNumbers);
|
||||
this._hideByMessageWindowHidden = true;
|
||||
};
|
||||
|
||||
Window_Message.prototype.subWindows = function () {
|
||||
return [
|
||||
this._goldWindow,
|
||||
this._nameBoxWindow,
|
||||
this._choiceListWindow,
|
||||
this._numberInputWindow,
|
||||
this._eventItemWindow,
|
||||
];
|
||||
};
|
||||
|
||||
Window_Message.prototype.showAllWindow = function () {
|
||||
this.show();
|
||||
this.subWindows().forEach(
|
||||
function (subWindow) {
|
||||
this.showSubWindow(subWindow);
|
||||
}.bind(this)
|
||||
);
|
||||
this.linkPictures(null, param.linkShowPictureNumbers);
|
||||
this.linkPictures(null, param.linkPictureNumbers);
|
||||
this._hideByMessageWindowHidden = false;
|
||||
};
|
||||
|
||||
Window_Message.prototype.isHidden = function () {
|
||||
return this._hideByMessageWindowHidden;
|
||||
};
|
||||
|
||||
Window_Message.prototype.linkPictures = function (opacity, pictureNumbers) {
|
||||
if (!pictureNumbers || $gameSwitches.value(param.disableLinkSwitchId)) {
|
||||
return;
|
||||
}
|
||||
pictureNumbers.forEach(function (pictureId) {
|
||||
this.linkPicture(opacity, pictureId);
|
||||
}, this);
|
||||
};
|
||||
|
||||
Window_Message.prototype.linkPicture = function (opacity, pictureId) {
|
||||
var picture = $gameScreen.picture(pictureId);
|
||||
if (!picture) {
|
||||
return;
|
||||
}
|
||||
if (opacity === null) {
|
||||
if (!this._originalPictureOpacities.hasOwnProperty(pictureId)) {
|
||||
return;
|
||||
}
|
||||
opacity = this._originalPictureOpacities[pictureId];
|
||||
} else {
|
||||
this._originalPictureOpacities[pictureId] = picture.opacity();
|
||||
}
|
||||
picture.linkWithMessageWindow(opacity);
|
||||
};
|
||||
|
||||
Window_Message.prototype.hideSubWindow = function (subWindow) {
|
||||
subWindow.prevVisible = subWindow.visible;
|
||||
subWindow.hide();
|
||||
};
|
||||
|
||||
Window_Message.prototype.showSubWindow = function (subWindow) {
|
||||
if (subWindow.prevVisible) subWindow.show();
|
||||
subWindow.prevVisible = undefined;
|
||||
};
|
||||
|
||||
Window_Message.prototype.hasNameWindow = function () {
|
||||
return this._nameWindow && typeof Window_NameBox !== "undefined";
|
||||
};
|
||||
|
||||
// 古いYEP_MessageCore.jsでは、ネーム表示ウィンドウはsubWindowsに含まれる
|
||||
Window_Message.prototype.nameWindowIsSubWindow = function () {
|
||||
return (
|
||||
this.subWindows().filter(function (subWindow) {
|
||||
return subWindow === this._nameWindow;
|
||||
}, this).length > 0
|
||||
);
|
||||
};
|
||||
|
||||
Window_Message.prototype.disableWindowHidden = function () {
|
||||
return (
|
||||
(param.disableSwitchId > 0 &&
|
||||
$gameSwitches.value(param.disableSwitchId)) ||
|
||||
(param.disableInBattle && $gameParty.inBattle())
|
||||
);
|
||||
};
|
||||
|
||||
Window_Message.prototype.isTriggeredHidden = function () {
|
||||
if (this.disableWindowHidden()) {
|
||||
return false;
|
||||
}
|
||||
if (param.triggerSwitch > 0 && this.isTriggeredHiddenSwitch()) {
|
||||
return true;
|
||||
}
|
||||
return param.triggerButton.some(function (button) {
|
||||
switch (button) {
|
||||
case "":
|
||||
case "右クリック":
|
||||
case "light_click":
|
||||
return TouchInput.isCancelled();
|
||||
case "ok":
|
||||
return false;
|
||||
default:
|
||||
return Input.isTriggered(button);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
Window_Message.prototype.isTriggeredHiddenSwitch = function () {
|
||||
var triggerSwitch = $gameSwitches.value(param.triggerSwitch);
|
||||
if (triggerSwitch && !this.isHidden()) {
|
||||
return true;
|
||||
}
|
||||
if (!triggerSwitch && this.isHidden()) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
var _Window_Message_updateInput = Window_Message.prototype.updateInput;
|
||||
Window_Message.prototype.updateInput = function () {
|
||||
if (this.isHidden()) return true;
|
||||
return _Window_Message_updateInput.apply(this, arguments);
|
||||
};
|
||||
|
||||
//=============================================================================
|
||||
// Window_ChoiceList、Window_NumberInput、Window_EventItem
|
||||
// 非表示の間は更新を停止します。
|
||||
//=============================================================================
|
||||
var _Window_ChoiceList_update = Window_ChoiceList.prototype.update;
|
||||
Window_ChoiceList.prototype.update = function () {
|
||||
if (!this.visible) return;
|
||||
_Window_ChoiceList_update.apply(this, arguments);
|
||||
};
|
||||
|
||||
var _Window_NumberInput_update = Window_NumberInput.prototype.update;
|
||||
Window_NumberInput.prototype.update = function () {
|
||||
if (!this.visible) return;
|
||||
_Window_NumberInput_update.apply(this, arguments);
|
||||
};
|
||||
|
||||
var _Window_EventItem_update = Window_EventItem.prototype.update;
|
||||
Window_EventItem.prototype.update = function () {
|
||||
if (!this.visible) return;
|
||||
_Window_EventItem_update.apply(this, arguments);
|
||||
};
|
||||
})();
|
||||
737
js/plugins/NRP_GameWindowSize.js
Normal file
737
js/plugins/NRP_GameWindowSize.js
Normal file
|
|
@ -0,0 +1,737 @@
|
|||
//=============================================================================
|
||||
// NRP_GameWindowSize.js
|
||||
//=============================================================================
|
||||
/*:
|
||||
* @target MV MZ
|
||||
* @plugindesc v1.05 Resize the entire game window & add to the options.
|
||||
* @author Takeshi Sunagawa (http://newrpg.seesaa.net/)
|
||||
* @url http://newrpg.seesaa.net/article/475413177.html
|
||||
*
|
||||
* @help Change the window size of the entire game.
|
||||
* It also adds the ability to change the window size to the options screen.
|
||||
*
|
||||
* ◆Main features
|
||||
* - Window size can be set independently from resolution.
|
||||
* - Window size change function can be added to the options screen.
|
||||
* If changed, the change will be reflected at startup thereafter.
|
||||
*
|
||||
* Note that it does not make sense on mobile or browser activation.
|
||||
* This plugin is automatically disabled.
|
||||
*
|
||||
* -------------------------------------------------------------------
|
||||
* [Notice (for MZ)]
|
||||
* -------------------------------------------------------------------
|
||||
* ◆About the window size immediately after starting the game
|
||||
* The window size at the moment the game is launched
|
||||
* cannot be changed by this plugin.
|
||||
* Normally, the window size should switch after a beat.
|
||||
*
|
||||
* In MZ, the window size immediately after startup is determined
|
||||
* by the "Screen Width" and "Screen Height" in "System 2".
|
||||
* These are values shared with the pixel size handled in the game.
|
||||
*
|
||||
* ※It is somewhat odd that pixel size and window size are determined
|
||||
* by the same item, but there is currently no way around this.
|
||||
*
|
||||
* There is no perfect solution, but the following is a tentative one.
|
||||
*
|
||||
* If you set the "screenWidth" and "screenHeight" in the plugin parameters,
|
||||
* you can change only the pixel size of the game,
|
||||
* independently of the "System 2" setting values.
|
||||
* In this case, set the window size to the "System 2" setting value.
|
||||
*
|
||||
* However, since the System 2 configuration values are also referenced
|
||||
* in the editor, the display area of the Troop screen in the database
|
||||
* is reduced as a side effect.
|
||||
* This is not a problem if the Troop screen is not used
|
||||
* at the end of development or in ARPGs.
|
||||
*
|
||||
* In addition, the horizontal scroll bar may appear
|
||||
* when the screen size is reduced, but this can be suppressed
|
||||
* by adding the following three lines to "[Project]\css\game.css"
|
||||
*
|
||||
* body::-webkit-scrollbar {
|
||||
* display:none;
|
||||
* }
|
||||
*
|
||||
* ※Please note that game.css is a file
|
||||
* that may be overwritten when the main unit is upgraded.
|
||||
*
|
||||
* -------------------------------------------------------------------
|
||||
* [Notice (for MV)]
|
||||
* -------------------------------------------------------------------
|
||||
* ◆About the window size immediately after starting the game
|
||||
* In MV, the window size at the moment of startup can be set
|
||||
* in "package.json" directly under the project.
|
||||
* If you want to change the standard window size,
|
||||
* it is better to set this value as well.
|
||||
* This can suppress the behavior of the window size
|
||||
* switching immediately after startup.
|
||||
*
|
||||
* ◆Conflict with YEP_CoreEngine.
|
||||
* YEP_CoreEngine has a specification
|
||||
* that forces the window size to match the resolution.
|
||||
* By placing this plugin underneath the YEP_CoreEngine,
|
||||
* you can only resize the window appropriately.
|
||||
*
|
||||
* -------------------------------------------------------------------
|
||||
* [Terms]
|
||||
* -------------------------------------------------------------------
|
||||
* There are no restrictions.
|
||||
* Modification, redistribution freedom, commercial availability,
|
||||
* and rights indication are also optional.
|
||||
* The author is not responsible,
|
||||
* but will deal with defects to the extent possible.
|
||||
*
|
||||
* @------------------------------------------------------------------
|
||||
* @ [Plugin Parameters]
|
||||
* @------------------------------------------------------------------
|
||||
* @param windowWidth
|
||||
* @type string
|
||||
* @default Graphics.width
|
||||
* @desc The width of the window (exclude frame) as the standard.
|
||||
* The default value is the same as the resolution.
|
||||
*
|
||||
* @param windowHeight
|
||||
* @type string
|
||||
* @default Graphics.height
|
||||
* @desc The height of the window (exclude frame) as the standard.
|
||||
* The default value is the same as the resolution.
|
||||
*
|
||||
* @param screenWidth
|
||||
* @type string
|
||||
* @desc Screen width.
|
||||
* Overrides the value of System2 only when entered.
|
||||
*
|
||||
* @param screenHeight
|
||||
* @type string
|
||||
* @desc Screen height.
|
||||
* Overrides the value of System2 only when entered.
|
||||
*
|
||||
* @param <option>
|
||||
*
|
||||
* @param useOption
|
||||
* @parent <option>
|
||||
* @type boolean
|
||||
* @default true
|
||||
* @desc Add the ability to change the window size to the options screen.
|
||||
*
|
||||
* @param optionPosition
|
||||
* @parent <option>
|
||||
* @type number
|
||||
* @default 2
|
||||
* @desc The position to insert an item into the options screen.
|
||||
* The default value is 2, which is under Command Remember.
|
||||
*
|
||||
* @param optionName
|
||||
* @parent <option>
|
||||
* @type string
|
||||
* @default Window Size
|
||||
* @desc Set the display name on the options screen.
|
||||
*
|
||||
* @param optionDispType
|
||||
* @parent <option>
|
||||
* @type select
|
||||
* @option % Style @value percent
|
||||
* @option Width*Heigth Style @value size
|
||||
* @default percent
|
||||
* @desc Set the display type on the options screen.
|
||||
*
|
||||
* @param windowSizeMin
|
||||
* @parent <option>
|
||||
* @type string
|
||||
* @default 50
|
||||
* @desc The minimum window size that can be changed.
|
||||
* The default value is 50(%).
|
||||
*
|
||||
* @param windowSizeMax
|
||||
* @parent <option>
|
||||
* @type string
|
||||
* @default 150
|
||||
* @desc The maximum window size that can be changed.
|
||||
* The default value is 150(%).
|
||||
*
|
||||
* @param windowSizeOffset
|
||||
* @parent <option>
|
||||
* @type string
|
||||
* @default 25
|
||||
* @desc The unit of change in window size.
|
||||
* The default value is 25(%).
|
||||
*
|
||||
* @param <cooperation>
|
||||
*
|
||||
* @param overWriteSceneManagerRun
|
||||
* @parent <cooperation>
|
||||
* @type boolean
|
||||
* @default false
|
||||
* @desc Override the SceneManager.run function. This function is used to disable window resizing by YEP_CoreEngine.
|
||||
*/
|
||||
|
||||
/*:ja
|
||||
* @target MV MZ
|
||||
* @plugindesc v1.05 ゲーム全体のウィンドウサイズを変更&オプションに追加
|
||||
* @author 砂川赳(http://newrpg.seesaa.net/)
|
||||
* @url http://newrpg.seesaa.net/article/475413177.html
|
||||
*
|
||||
* @help ゲーム全体のウィンドウサイズを変更します。
|
||||
* また、オプション画面にウィンドウサイズの変更機能を追加します。
|
||||
*
|
||||
* ◆主な特徴
|
||||
* ・解像度とは別に独立してウィンドウサイズを設定可能。
|
||||
* ・オプション画面にウィンドウサイズの変更機能を追加可能。
|
||||
* 変更すると以降、起動時にも反映されます。
|
||||
*
|
||||
* なお、モバイルやブラウザ起動では意味がないので、
|
||||
* このプラグインは自動で無効化されます。
|
||||
*
|
||||
* -------------------------------------------------------------------
|
||||
* ■注意点(MZ向け)
|
||||
* -------------------------------------------------------------------
|
||||
* ◆起動直後のウィンドウサイズについて
|
||||
* ゲームを起動した瞬間のウィンドウサイズは、このプラグインでは変更できません。
|
||||
* 通常は一拍遅れて、ウィンドウサイズが切り替わるはずです。
|
||||
*
|
||||
* MZでは起動直後のウィンドウサイズは、
|
||||
* システム2にある『画面の幅』『画面の高さ』によって決定されます。
|
||||
* これらはゲーム内で処理する解像度(ピクセルサイズ)と共有する値です。
|
||||
*
|
||||
* ※ピクセルサイズとウィンドウサイズが同じ項目で決定されるのは、
|
||||
* 少々おかしな仕様なのですが、現状ではどうにもなりません。
|
||||
*
|
||||
* 完璧な対処法はありませんが、以下は一応の対処法です。
|
||||
*
|
||||
* プラグインパラメータで『画面の幅』と『画面の高さ』の設定をすれば、
|
||||
* システム2の設定値とは別に、ゲームのピクセルサイズだけを変更できます。
|
||||
* この場合、システム2の設定値にはウィンドウサイズを設定しておきます。
|
||||
*
|
||||
* ただし、システム2の設定値はエディタでも参照しているため、
|
||||
* 副作用としてデータベースの敵グループ画面の表示領域が狭まってしまいます。
|
||||
* 開発終盤やARPGなどで敵グループ画面を使わないなら問題ありません。
|
||||
*
|
||||
* また、画面サイズを縮めた場合に横スクロールバーが表示される場合がありますが、
|
||||
* [プロジェクト]\css\game.css
|
||||
* に以下の三行を追記することで抑制できます。
|
||||
*
|
||||
* body::-webkit-scrollbar {
|
||||
* display:none;
|
||||
* }
|
||||
*
|
||||
* ※なお、game.cssは本体のバージョンアップ時に、
|
||||
* 上書きされる可能性があるファイルなのでご注意ください。
|
||||
*
|
||||
* -------------------------------------------------------------------
|
||||
* ■注意点(MV向け)
|
||||
* -------------------------------------------------------------------
|
||||
* ◆起動直後のウィンドウサイズについて
|
||||
* MVでは起動した瞬間のウィンドウサイズを、
|
||||
* プロジェクト直下の『package.json』で設定できます。
|
||||
* 標準のウィンドウサイズを変更する場合は、こちらの値も合わせておくとベターです。
|
||||
* 起動直後にウィンドウサイズが切り替わる挙動を抑制できます。
|
||||
*
|
||||
* ◆YEP_CoreEngineとの競合について
|
||||
* YEP_CoreEngineには、強制的にウィンドウサイズを解像度に合わせる仕様があります。
|
||||
* このプラグインをYEP_CoreEngineの下へ配置すれば、
|
||||
* 適切にウィンドウサイズだけを変更できます。
|
||||
*
|
||||
* -------------------------------------------------------------------
|
||||
* ■利用規約
|
||||
* -------------------------------------------------------------------
|
||||
* 特に制約はありません。
|
||||
* 改変、再配布自由、商用可、権利表示も任意です。
|
||||
* 作者は責任を負いませんが、不具合については可能な範囲で対応します。
|
||||
*
|
||||
* @------------------------------------------------------------------
|
||||
* @ プラグインパラメータ
|
||||
* @------------------------------------------------------------------
|
||||
*
|
||||
* @param windowWidth
|
||||
* @text ウィンドウ横幅
|
||||
* @type string
|
||||
* @default Graphics.width
|
||||
* @desc 標準とするウィンドウの横幅(枠除く)です。
|
||||
* 初期値は解像度と同じです。
|
||||
*
|
||||
* @param windowHeight
|
||||
* @text ウィンドウ縦幅
|
||||
* @type string
|
||||
* @default Graphics.height
|
||||
* @desc 標準とするウィンドウの縦幅(枠除く)です。
|
||||
* 初期値は解像度と同じです。
|
||||
*
|
||||
* @param screenWidth
|
||||
* @text 画面の幅
|
||||
* @type string
|
||||
* @desc 画面の横幅です。
|
||||
* 入力時のみシステム2の値を上書きします。
|
||||
*
|
||||
* @param screenHeight
|
||||
* @text 画面の高さ
|
||||
* @type string
|
||||
* @desc 画面の縦幅です。
|
||||
* 入力時のみシステム2の値を上書きします。
|
||||
*
|
||||
* @param <option>
|
||||
* @text <オプション>
|
||||
*
|
||||
* @param useOption
|
||||
* @text オプションに表示
|
||||
* @parent <option>
|
||||
* @type boolean
|
||||
* @default true
|
||||
* @desc ウィンドウサイズの変更機能をオプション画面に追加します。
|
||||
*
|
||||
* @param optionPosition
|
||||
* @text オプション挿入位置
|
||||
* @parent <option>
|
||||
* @type number
|
||||
* @default 2
|
||||
* @desc オプション画面に項目を挿入する位置です。
|
||||
* 初期値は2。コマンド記憶の下になります。
|
||||
*
|
||||
* @param optionName
|
||||
* @text オプション表示名
|
||||
* @parent <option>
|
||||
* @type string
|
||||
* @default ウィンドウサイズ
|
||||
* @desc オプション画面での表示名を設定します。
|
||||
*
|
||||
* @param optionDispType
|
||||
* @text オプション表示形式
|
||||
* @parent <option>
|
||||
* @type select
|
||||
* @option %表示 @value percent
|
||||
* @option 横*縦表示 @value size
|
||||
* @default percent
|
||||
* @desc オプション画面での表示形式を設定します。
|
||||
*
|
||||
* @param windowSizeMin
|
||||
* @text 最小ウィンドウサイズ
|
||||
* @parent <option>
|
||||
* @type string
|
||||
* @default 50
|
||||
* @desc 変更可能な最小のウィンドウサイズです。
|
||||
* 初期値は50(%)です。
|
||||
*
|
||||
* @param windowSizeMax
|
||||
* @text 最大ウィンドウサイズ
|
||||
* @parent <option>
|
||||
* @type string
|
||||
* @default 150
|
||||
* @desc 変更可能な最大のウィンドウサイズです。
|
||||
* 初期値は150(%)です。
|
||||
*
|
||||
* @param windowSizeOffset
|
||||
* @text 変更単位
|
||||
* @parent <option>
|
||||
* @type string
|
||||
* @default 25
|
||||
* @desc ウィンドウサイズの変更単位です。
|
||||
* 初期値は25(%)です。
|
||||
*
|
||||
* @param <cooperation>
|
||||
* @text <外部連携>
|
||||
*
|
||||
* @param overWriteSceneManagerRun
|
||||
* @text SceneManager.runを上書
|
||||
* @parent <cooperation>
|
||||
* @type boolean
|
||||
* @default false
|
||||
* @desc SceneManager.run関数を上書きします。YEP_CoreEngineのウィンドウサイズ変更を無効化するための機能です。
|
||||
*/
|
||||
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
function setDefault(str, def) {
|
||||
return str ? str : def;
|
||||
}
|
||||
function toNumber(str, def) {
|
||||
return isNaN(str) ? def : +(str || def);
|
||||
}
|
||||
function toBoolean(str) {
|
||||
if (str == true) {
|
||||
return true;
|
||||
}
|
||||
return str == "true" ? true : false;
|
||||
}
|
||||
|
||||
const parameters = PluginManager.parameters("NRP_GameWindowSize");
|
||||
// 基本項目
|
||||
const pWindowWidth = parameters["windowWidth"];
|
||||
const pWindowHeight = parameters["windowHeight"];
|
||||
const pScreenWidth = parameters["screenWidth"];
|
||||
const pScreenHeight = parameters["screenHeight"];
|
||||
// オプション
|
||||
const pUseOption = toBoolean(parameters["useOption"]);
|
||||
const pOptionName = parameters["optionName"];
|
||||
const pOptionPosition = toNumber(parameters["optionPosition"], 2);
|
||||
const pOptionDispType = parameters["optionDispType"];
|
||||
const pWindowSizeMin = setDefault(parameters["windowSizeMin"], 50);
|
||||
const pWindowSizeMax = setDefault(parameters["windowSizeMax"], 150);
|
||||
const pWindowSizeOffset = setDefault(parameters["windowSizeOffset"], 25);
|
||||
// 外部連携
|
||||
const pOverWriteSceneManagerRun = toBoolean(
|
||||
parameters["overWriteSceneManagerRun"]
|
||||
);
|
||||
|
||||
// 識別子
|
||||
const WINDOW_SIZE_SYMBOL = "windowSize";
|
||||
|
||||
/**
|
||||
* 上書きの場合
|
||||
*/
|
||||
if (pOverWriteSceneManagerRun) {
|
||||
SceneManager.run = function (sceneClass) {
|
||||
try {
|
||||
this.initialize();
|
||||
this.goto(sceneClass);
|
||||
|
||||
// MVの場合
|
||||
if (Utils.RPGMAKER_NAME == "MV") {
|
||||
this.requestUpdate();
|
||||
// MZの場合
|
||||
} else {
|
||||
Graphics.startGameLoop();
|
||||
}
|
||||
} catch (e) {
|
||||
this.catchException(e);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* ●ゲーム起動時
|
||||
*/
|
||||
const _Scene_Boot_start = Scene_Boot.prototype.start;
|
||||
Scene_Boot.prototype.start = function () {
|
||||
_Scene_Boot_start.apply(this, arguments);
|
||||
|
||||
// ウィンドウサイズを設定値へ変更
|
||||
changeWindowSize();
|
||||
|
||||
// 強制的に画面サイズを変更
|
||||
if (pScreenWidth && pScreenHeight) {
|
||||
Graphics.width = eval(pScreenWidth);
|
||||
Graphics.height = eval(pScreenHeight);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* ●ウィンドウサイズの変更
|
||||
*/
|
||||
function changeWindowSize() {
|
||||
// ローカル実行以外では機能無効
|
||||
if (!Utils.isNwjs()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (pWindowWidth || pWindowHeight) {
|
||||
const dw = getWindowWidth() - window.innerWidth;
|
||||
const dh = getWindowHeight() - window.innerHeight;
|
||||
window.resizeBy(dw, dh);
|
||||
window.moveBy(-dw / 2, -dh / 2);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* ●ウィンドウの横幅取得
|
||||
*/
|
||||
function getWindowWidth() {
|
||||
var width = Graphics.width;
|
||||
if (pWindowWidth) {
|
||||
width = eval(pWindowWidth);
|
||||
}
|
||||
return Math.round(width * getWindowSizeRate());
|
||||
}
|
||||
|
||||
/**
|
||||
* ●ウィンドウの縦幅取得
|
||||
*/
|
||||
function getWindowHeight() {
|
||||
var height = Graphics.height;
|
||||
if (pWindowHeight) {
|
||||
height = eval(pWindowHeight);
|
||||
}
|
||||
return Math.round(height * getWindowSizeRate());
|
||||
}
|
||||
|
||||
/**
|
||||
* ●ウィンドウサイズのレートを取得
|
||||
*/
|
||||
function getWindowSizeRate() {
|
||||
var windowSizeRate = 1;
|
||||
// オプションを使用しない場合は1
|
||||
if (!pUseOption) {
|
||||
return windowSizeRate;
|
||||
}
|
||||
|
||||
if (ConfigManager.windowSize) {
|
||||
windowSizeRate = ConfigManager.windowSize / 100;
|
||||
}
|
||||
|
||||
return windowSizeRate;
|
||||
}
|
||||
|
||||
// ローカル実行以外では機能無効
|
||||
if (!Utils.isNwjs()) {
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* オプションを使用しない場合はここで処理終了
|
||||
*/
|
||||
if (!pUseOption) {
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* ●オプション用ウィンドウサイズの最小値
|
||||
*/
|
||||
function windowSizeMin() {
|
||||
return eval(pWindowSizeMin);
|
||||
}
|
||||
|
||||
/**
|
||||
* ●オプション用ウィンドウサイズの最大値
|
||||
*/
|
||||
function windowSizeMax() {
|
||||
return eval(pWindowSizeMax);
|
||||
}
|
||||
|
||||
/**
|
||||
* ●オプション用ウィンドウサイズの変更単位
|
||||
*/
|
||||
function windowSizeOffset() {
|
||||
return eval(pWindowSizeOffset);
|
||||
}
|
||||
|
||||
// ウィンドウサイズの初期値
|
||||
ConfigManager.windowSize = 100;
|
||||
|
||||
/**
|
||||
* ●オプション画面の項目生成
|
||||
*/
|
||||
var _ConfigManager_makeData = ConfigManager.makeData;
|
||||
ConfigManager.makeData = function () {
|
||||
var config = _ConfigManager_makeData.apply(this, arguments);
|
||||
|
||||
config.windowSize = this.windowSize;
|
||||
return config;
|
||||
};
|
||||
|
||||
/**
|
||||
* ●オプション画面の項目生成
|
||||
*/
|
||||
var _ConfigManager_applyData = ConfigManager.applyData;
|
||||
ConfigManager.applyData = function (config) {
|
||||
_ConfigManager_applyData.apply(this, arguments);
|
||||
|
||||
this.windowSize = this.readWindowSize(config, WINDOW_SIZE_SYMBOL);
|
||||
};
|
||||
|
||||
/**
|
||||
* 【独自】ウィンドウサイズをコンフィグから読込
|
||||
*/
|
||||
ConfigManager.readWindowSize = function (config, name) {
|
||||
var value = config[name];
|
||||
if (value !== undefined) {
|
||||
return Number(value).clamp(windowSizeMin(), windowSizeMax());
|
||||
} else {
|
||||
return 100;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* ●表示状態取得
|
||||
*/
|
||||
var _Window_Options_statusText = Window_Options.prototype.statusText;
|
||||
Window_Options.prototype.statusText = function (index) {
|
||||
var symbol = this.commandSymbol(index);
|
||||
var value = this.getConfigValue(symbol);
|
||||
|
||||
if (isWindowsSizeSymbol(symbol)) {
|
||||
return windowSizeStatusText(value);
|
||||
}
|
||||
|
||||
return _Window_Options_statusText.apply(this, arguments);
|
||||
};
|
||||
|
||||
/**
|
||||
* ●ウィンドウサイズの表示名
|
||||
*/
|
||||
function windowSizeStatusText(value) {
|
||||
// サイズ表示
|
||||
if (pOptionDispType == "size") {
|
||||
return getWindowWidth() + "*" + getWindowHeight();
|
||||
}
|
||||
// %表示
|
||||
return Math.round(value * 10) / 10 + "%";
|
||||
}
|
||||
|
||||
/**
|
||||
* ●あまり細かい値にならないよう丸める
|
||||
*/
|
||||
function windowSizeRound(value) {
|
||||
// 最小値、最大値、100と1以内ならそれぞれの値を設定する。
|
||||
// (涙ぐましい微調整……)
|
||||
if (Math.abs(value - windowSizeMin()) < 1) {
|
||||
value = windowSizeMin();
|
||||
} else if (Math.abs(value - windowSizeMax()) < 1) {
|
||||
value = windowSizeMax();
|
||||
} else if (Math.abs(value - 100) < 1) {
|
||||
value = 100;
|
||||
}
|
||||
|
||||
// 少数第二位まで
|
||||
return Math.round(value * 100) / 100;
|
||||
}
|
||||
|
||||
/**
|
||||
* ●決定キー
|
||||
*/
|
||||
var _Window_Options_processOk = Window_Options.prototype.processOk;
|
||||
Window_Options.prototype.processOk = function () {
|
||||
var index = this.index();
|
||||
var symbol = this.commandSymbol(index);
|
||||
var value = this.getConfigValue(symbol);
|
||||
|
||||
if (isWindowsSizeSymbol(symbol)) {
|
||||
value += windowSizeOffset();
|
||||
value = windowSizeRound(value);
|
||||
|
||||
if (value > windowSizeMax()) {
|
||||
value = windowSizeMin();
|
||||
}
|
||||
this.changeWindowSizeValue(symbol, value);
|
||||
return;
|
||||
}
|
||||
|
||||
_Window_Options_processOk.apply(this, arguments);
|
||||
};
|
||||
|
||||
/**
|
||||
* ●カーソル右
|
||||
*/
|
||||
var _Window_Options_cursorRight = Window_Options.prototype.cursorRight;
|
||||
Window_Options.prototype.cursorRight = function (wrap) {
|
||||
var index = this.index();
|
||||
var symbol = this.commandSymbol(index);
|
||||
var value = this.getConfigValue(symbol);
|
||||
|
||||
if (isWindowsSizeSymbol(symbol)) {
|
||||
value += windowSizeOffset();
|
||||
value = windowSizeRound(value);
|
||||
this.changeWindowSizeValue(symbol, value);
|
||||
return;
|
||||
}
|
||||
|
||||
_Window_Options_cursorRight.apply(this, arguments);
|
||||
};
|
||||
|
||||
/**
|
||||
* ●カーソル左
|
||||
*/
|
||||
var _Window_Options_cursorLeft = Window_Options.prototype.cursorLeft;
|
||||
Window_Options.prototype.cursorLeft = function (wrap) {
|
||||
var index = this.index();
|
||||
var symbol = this.commandSymbol(index);
|
||||
var value = this.getConfigValue(symbol);
|
||||
|
||||
if (isWindowsSizeSymbol(symbol)) {
|
||||
value -= windowSizeOffset();
|
||||
value = windowSizeRound(value);
|
||||
this.changeWindowSizeValue(symbol, value);
|
||||
return;
|
||||
}
|
||||
|
||||
_Window_Options_cursorLeft.apply(this, arguments);
|
||||
};
|
||||
|
||||
/**
|
||||
* 【独自】ウィンドウサイズの値を変更
|
||||
*/
|
||||
Window_Options.prototype.changeWindowSizeValue = function (symbol, value) {
|
||||
value = value.clamp(windowSizeMin(), windowSizeMax());
|
||||
this.changeValue(symbol, value);
|
||||
|
||||
// MZの場合
|
||||
if (Utils.RPGMAKER_NAME != "MV") {
|
||||
// タッチによる選択を禁止
|
||||
// ウィンドウサイズ変更による選択状態の変更を避けるため
|
||||
this._noTouchSelect = true;
|
||||
}
|
||||
};
|
||||
|
||||
// MZの場合
|
||||
if (Utils.RPGMAKER_NAME != "MV") {
|
||||
/**
|
||||
* ●タッチ時のセレクト処理
|
||||
*/
|
||||
const _Window_Options_onTouchSelect =
|
||||
Window_Options.prototype.onTouchSelect;
|
||||
Window_Options.prototype.onTouchSelect = function (trigger) {
|
||||
// タッチ選択を禁止!
|
||||
if (this._noTouchSelect) {
|
||||
this._noTouchSelect = undefined;
|
||||
return;
|
||||
}
|
||||
|
||||
_Window_Options_onTouchSelect.apply(this, arguments);
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* ●ウィンドウサイズの項目追加
|
||||
*/
|
||||
const _Window_Options_makeCommandList =
|
||||
Window_Options.prototype.makeCommandList;
|
||||
Window_Options.prototype.makeCommandList = function () {
|
||||
_Window_Options_makeCommandList.apply(this, arguments);
|
||||
|
||||
this._list.splice(pOptionPosition, 0, {
|
||||
name: pOptionName,
|
||||
symbol: WINDOW_SIZE_SYMBOL,
|
||||
enabled: true,
|
||||
ext: null,
|
||||
});
|
||||
|
||||
// Mano_InputConfig.jsとの競合対処
|
||||
if (this._gamepadOptionIndex >= pOptionPosition) {
|
||||
this._gamepadOptionIndex++;
|
||||
}
|
||||
if (this._keyboardConfigIndex >= pOptionPosition) {
|
||||
this._keyboardConfigIndex++;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* ●設定値を反映
|
||||
*/
|
||||
var _Window_Options_setConfigValue = Window_Options.prototype.setConfigValue;
|
||||
Window_Options.prototype.setConfigValue = function (symbol, volume) {
|
||||
_Window_Options_setConfigValue.apply(this, arguments);
|
||||
|
||||
if (isWindowsSizeSymbol(symbol)) {
|
||||
// ウィンドウサイズを反映
|
||||
changeWindowSize();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* ●ウィンドウサイズのオプションか?
|
||||
*/
|
||||
function isWindowsSizeSymbol(symbol) {
|
||||
if (symbol == WINDOW_SIZE_SYMBOL) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* ●コマンド数を加算
|
||||
*/
|
||||
const _Scene_Options_maxCommands = Scene_Options.prototype.maxCommands;
|
||||
Scene_Options.prototype.maxCommands = function () {
|
||||
return _Scene_Options_maxCommands.apply(this, arguments) + 1;
|
||||
};
|
||||
})();
|
||||
772
js/plugins/NRP_MessageWindow.js
Normal file
772
js/plugins/NRP_MessageWindow.js
Normal file
|
|
@ -0,0 +1,772 @@
|
|||
//=============================================================================
|
||||
// NRP_MessageWindow.js
|
||||
//=============================================================================
|
||||
/*:
|
||||
* @target MZ
|
||||
* @plugindesc v1.02 Adjust the message window.
|
||||
* @author Takeshi Sunagawa (http://newrpg.seesaa.net/)
|
||||
* @url https://newrpg.seesaa.net/article/492543897.html
|
||||
*
|
||||
* @help Make various adjustments to the message window.
|
||||
* For example, you can adjust the size and position of the window.
|
||||
*
|
||||
* -------------------------------------------------------------------
|
||||
* [3-line Message Display]
|
||||
* -------------------------------------------------------------------
|
||||
* For example, a larger font and a 3-line display of the message
|
||||
* will make the text easier to read.
|
||||
*
|
||||
* As you can find out, most JRPGs and ADVs nowadays
|
||||
* have a style of 2 to 3 lines plus a name field.
|
||||
* The MZ default style of 4 lines + name field is quite a lot of text,
|
||||
* and the text tends to be small, making it difficult to read.
|
||||
* It is not recommended to follow the default style without thinking.
|
||||
*
|
||||
* The key to this is to make the "LineHeight" wider.
|
||||
*
|
||||
* -------------------------------------------------------------------
|
||||
* [Variable Window Size]
|
||||
* -------------------------------------------------------------------
|
||||
* Formulas can be used for most items.
|
||||
* For example, if "WindowHeight" is set to "$gameVariables.value(1)",
|
||||
* the height of the message window will change according to
|
||||
* the value of variable 1.
|
||||
*
|
||||
* This is useful, for example, when you want to have
|
||||
* two lines of text in a scene displaying a large image.
|
||||
*
|
||||
* -------------------------------------------------------------------
|
||||
* [Mask Image Function]
|
||||
* -------------------------------------------------------------------
|
||||
* By setting "MaskImage",
|
||||
* you can finely adjust the transparency of the window.
|
||||
* For example, you can increase
|
||||
* the transparency only on the right side of the window.
|
||||
* White areas of the mask image
|
||||
* are opaque and black areas are transparent.
|
||||
* ※See the sample image for details.
|
||||
*
|
||||
* Note that this does not work in RPG Maker MV for some reason,
|
||||
* so it is for MZ only.
|
||||
*
|
||||
* -------------------------------------------------------------------
|
||||
* [Terms]
|
||||
* -------------------------------------------------------------------
|
||||
* There are no restrictions.
|
||||
* Modification, redistribution freedom, commercial availability,
|
||||
* and rights indication are also optional.
|
||||
* The author is not responsible,
|
||||
* but will deal with defects to the extent possible.
|
||||
*
|
||||
* @------------------------------------------------------------------
|
||||
* @ Plugin Parameters
|
||||
* @------------------------------------------------------------------
|
||||
*
|
||||
* @param <MessageWindow>
|
||||
*
|
||||
* @param WindowWidth
|
||||
* @parent <MessageWindow>
|
||||
* @default Graphics.boxWidth
|
||||
* @desc The width of the message window.
|
||||
* Default: Graphics.boxWidth
|
||||
*
|
||||
* @param WindowHeight
|
||||
* @parent <MessageWindow>
|
||||
* @default this.fittingHeight(4) + 8
|
||||
* @desc The height of the message window.
|
||||
* Default: this.fittingHeight(4) + 8
|
||||
*
|
||||
* @param WindowX
|
||||
* @parent <MessageWindow>
|
||||
* @desc X coordinate for displaying the message window.
|
||||
*
|
||||
* @param WindowY
|
||||
* @parent <MessageWindow>
|
||||
* @default (this._positionType * (Graphics.boxHeight - this.height)) / 2
|
||||
* @desc Y coordinate for displaying the message window.
|
||||
* Default: (this._positionType * (Graphics.boxHeight - this.height)) / 2
|
||||
*
|
||||
* @param LineHeight
|
||||
* @parent <MessageWindow>
|
||||
* @desc The height per line of the message.
|
||||
* Default: 36
|
||||
*
|
||||
* @param AdjustMessageX
|
||||
* @parent <MessageWindow>
|
||||
* @type number
|
||||
* @desc Adjust the X coordinate of the message.
|
||||
*
|
||||
* @param AdjustMessageY
|
||||
* @parent <MessageWindow>
|
||||
* @type number
|
||||
* @desc Adjust the Y coordinate of the message.
|
||||
*
|
||||
* @param MessageFontSize
|
||||
* @parent <MessageWindow>
|
||||
* @desc The font size of the message.
|
||||
*
|
||||
* @param WindowOpacity
|
||||
* @parent <MessageWindow>
|
||||
* @desc Opacity of the message window.
|
||||
* 255 makes it completely opaque.
|
||||
*
|
||||
* @param MaskImage
|
||||
* @parent <MessageWindow>
|
||||
* @type file
|
||||
* @dir img/system
|
||||
* @desc A mask image that applies semi-transparent processing to the window. For MZ only.
|
||||
*
|
||||
* @param NoMaskOpacity
|
||||
* @parent MaskImage
|
||||
* @desc The opacity of the message window if the mask could not be applied to it.
|
||||
*
|
||||
* @param FixIconY
|
||||
* @parent <MessageWindow>
|
||||
* @type boolean
|
||||
* @default true
|
||||
* @desc Fix a problem in which the Y coordinate of an icon is misaligned when the height of a line is changed.
|
||||
*
|
||||
* @param <NameBoxWindow>
|
||||
* @desc This item is related to the name field.
|
||||
* This field is invalid because it does not exist in RPG Maker MV.
|
||||
*
|
||||
* @param NameBoxAdjustX
|
||||
* @parent <NameBoxWindow>
|
||||
* @desc X-coordinate correction value for the name field.
|
||||
*
|
||||
* @param NameBoxAdjustY
|
||||
* @parent <NameBoxWindow>
|
||||
* @desc Y-coordinate correction value for the name field.
|
||||
*
|
||||
* @param NameBoxFontSize
|
||||
* @parent <NameBoxWindow>
|
||||
* @desc The font size of the name field.
|
||||
*
|
||||
* @param NameBoxOpacity
|
||||
* @parent <NameBoxWindow>
|
||||
* @desc Opacity of the name field.
|
||||
* 255 makes it completely opaque.
|
||||
*/
|
||||
|
||||
/*:ja
|
||||
* @target MZ
|
||||
* @plugindesc v1.02 メッセージウィンドウを調整する。
|
||||
* @author 砂川赳(http://newrpg.seesaa.net/)
|
||||
* @url https://newrpg.seesaa.net/article/492543897.html
|
||||
*
|
||||
* @help メッセージウィンドウに対して様々な調整を行います。
|
||||
* 例えば、ウィンドウのサイズや位置を調整できます。
|
||||
*
|
||||
* -------------------------------------------------------------------
|
||||
* ■メッセージ表示の3行化
|
||||
* -------------------------------------------------------------------
|
||||
* 例えば、フォントを大きくしてメッセージを3行表示にすれば、
|
||||
* 文章を読みやすくすることができます。
|
||||
*
|
||||
* 調べてみれば分かりますが、今時のJRPGやADVは
|
||||
* 2~3行+名前欄というスタイルが主流です。
|
||||
* MZデフォルトの4行+名前欄というスタイルは、
|
||||
* かなり文章量が多く、文字も小さくなりがちなので読みづらいです。
|
||||
* 何も考えず初期状態を踏襲することはあまりオススメしません。
|
||||
*
|
||||
* この際、『一行の縦幅』を広くすることがポイントです。
|
||||
* 特に漢字にルビを振るプラグインと併用する場合は、
|
||||
* 行間を広めに取ることをオススメします。
|
||||
*
|
||||
* -------------------------------------------------------------------
|
||||
* ■ウィンドウサイズの可変化
|
||||
* -------------------------------------------------------------------
|
||||
* ほとんどの項目で数式が使用可能です。
|
||||
* 例えば『ウィンドウの縦幅』を「$gameVariables.value(1)」にすれば、
|
||||
* 変数1の値によって、メッセージウィンドウの縦幅が変化するようになります。
|
||||
*
|
||||
* 例えば「一枚絵を表示するシーンでは文章を2行にしたい」
|
||||
* といった場合に便利です。
|
||||
*
|
||||
* -------------------------------------------------------------------
|
||||
* ■マスク画像機能
|
||||
* -------------------------------------------------------------------
|
||||
* 『マスク画像』を設定することで、ウィンドウの透明度を細かく設定できます。
|
||||
* 例えば、ウィンドウの右側だけ透明度を上げるといった調整ができます。
|
||||
* マスク画像の白い部分が不透明で黒い部分が透明となります。
|
||||
* ※詳細はサンプル画像をご覧ください。
|
||||
*
|
||||
* なお、RPGツクールMVではなぜか機能しないのでMZ専用です。
|
||||
*
|
||||
* -------------------------------------------------------------------
|
||||
* ■利用規約
|
||||
* -------------------------------------------------------------------
|
||||
* 特に制約はありません。
|
||||
* 改変、再配布自由、商用可、権利表示も任意です。
|
||||
* 作者は責任を負いませんが、不具合については可能な範囲で対応します。
|
||||
*
|
||||
* @------------------------------------------------------------------
|
||||
* @ プラグインパラメータ
|
||||
* @------------------------------------------------------------------
|
||||
*
|
||||
* @param <MessageWindow>
|
||||
* @text <メッセージウィンドウ>
|
||||
*
|
||||
* @param WindowWidth
|
||||
* @parent <MessageWindow>
|
||||
* @text ウィンドウの横幅
|
||||
* @default Graphics.boxWidth
|
||||
* @desc メッセージウィンドウの横幅です。
|
||||
* 初期値は「Graphics.boxWidth」です。
|
||||
*
|
||||
* @param WindowHeight
|
||||
* @parent <MessageWindow>
|
||||
* @text ウィンドウの縦幅
|
||||
* @default this.fittingHeight(4) + 8
|
||||
* @desc メッセージウィンドウの縦幅です。
|
||||
* 初期値は「this.fittingHeight(4) + 8」です。
|
||||
*
|
||||
* @param WindowX
|
||||
* @parent <MessageWindow>
|
||||
* @text ウィンドウのX座標
|
||||
* @desc メッセージウィンドウを表示するX座標です。
|
||||
*
|
||||
* @param WindowY
|
||||
* @parent <MessageWindow>
|
||||
* @text ウィンドウのY座標
|
||||
* @default (this._positionType * (Graphics.boxHeight - this.height)) / 2
|
||||
* @desc メッセージウィンドウを表示するY座標です。
|
||||
* 初期値:(this._positionType * (Graphics.boxHeight - this.height)) / 2
|
||||
*
|
||||
* @param LineHeight
|
||||
* @parent <MessageWindow>
|
||||
* @text 一行の縦幅
|
||||
* @desc 文章の一行当たりの縦幅です。
|
||||
* 初期値は36です。
|
||||
*
|
||||
* @param AdjustMessageX
|
||||
* @parent <MessageWindow>
|
||||
* @text 文章のX座標調整
|
||||
* @type number
|
||||
* @desc 文章のX座標を調整します。
|
||||
*
|
||||
* @param AdjustMessageY
|
||||
* @parent <MessageWindow>
|
||||
* @text 文章のY座標調整
|
||||
* @type number
|
||||
* @desc 文章のY座標を調整します。
|
||||
*
|
||||
* @param MessageFontSize
|
||||
* @parent <MessageWindow>
|
||||
* @text 文章のフォントサイズ
|
||||
* @desc 文章のフォントサイズです。
|
||||
*
|
||||
* @param WindowOpacity
|
||||
* @parent <MessageWindow>
|
||||
* @text ウィンドウの不透明度
|
||||
* @desc メッセージウィンドウの不透明度です。
|
||||
* 255で完全な不透明になります。
|
||||
*
|
||||
* @param MaskImage
|
||||
* @parent <MessageWindow>
|
||||
* @text マスク画像
|
||||
* @type file
|
||||
* @dir img/system
|
||||
* @desc ウィンドウに半透明処理を施すマスク画像です。
|
||||
* この機能はMZ専用です。
|
||||
*
|
||||
* @param NoMaskOpacity
|
||||
* @parent MaskImage
|
||||
* @text マスク対象外の不透明度
|
||||
* @desc メッセージウィンドウにマスクを適用できなかった場合の不透明度です。
|
||||
*
|
||||
* @param FixIconY
|
||||
* @parent <MessageWindow>
|
||||
* @text アイコンのY座標修正
|
||||
* @type boolean
|
||||
* @default true
|
||||
* @desc 一行の縦幅を変更した時に、アイコンのY座標がズレる問題を修正します。
|
||||
*
|
||||
* @param <NameBoxWindow>
|
||||
* @text <名前欄>
|
||||
* @desc 名前欄に関する項目です。
|
||||
* ツクールMVでは存在しないため無効です。
|
||||
*
|
||||
* @param NameBoxAdjustX
|
||||
* @parent <NameBoxWindow>
|
||||
* @text 名前欄のX座標補正
|
||||
* @desc 名前欄のX座標補正値です。
|
||||
*
|
||||
* @param NameBoxAdjustY
|
||||
* @parent <NameBoxWindow>
|
||||
* @text 名前欄のY座標補正
|
||||
* @desc 名前欄のY座標補正値です。
|
||||
*
|
||||
* @param NameBoxFontSize
|
||||
* @parent <NameBoxWindow>
|
||||
* @text 名前欄のフォントサイズ
|
||||
* @desc 名前欄のフォントサイズです。
|
||||
*
|
||||
* @param NameBoxOpacity
|
||||
* @parent <NameBoxWindow>
|
||||
* @text 名前欄の不透明度
|
||||
* @desc 名前欄の不透明度です。
|
||||
* 255で完全な不透明になります。
|
||||
*/
|
||||
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
function toBoolean(str, def) {
|
||||
if (str === true || str === "true") {
|
||||
return true;
|
||||
} else if (str === false || str === "false") {
|
||||
return false;
|
||||
}
|
||||
return def;
|
||||
}
|
||||
function toNumber(str, def) {
|
||||
if (str == undefined || str == "") {
|
||||
return def;
|
||||
}
|
||||
return isNaN(str) ? def : +(str || def);
|
||||
}
|
||||
function setDefault(str, def) {
|
||||
if (str == undefined || str == "") {
|
||||
return def;
|
||||
}
|
||||
return str;
|
||||
}
|
||||
/**
|
||||
* ●構造体(二重配列)をJSで扱えるように変換
|
||||
*/
|
||||
function parseStruct2(arg) {
|
||||
var ret = [];
|
||||
|
||||
if (arg) {
|
||||
JSON.parse(arg).forEach(function (str) {
|
||||
ret.push(JSON.parse(str));
|
||||
});
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
const PLUGIN_NAME = "NRP_MessageWindow";
|
||||
const parameters = PluginManager.parameters(PLUGIN_NAME);
|
||||
const pWindowWidth = setDefault(parameters["WindowWidth"]);
|
||||
const pWindowHeight = setDefault(parameters["WindowHeight"]);
|
||||
const pWindowX = setDefault(parameters["WindowX"]);
|
||||
const pWindowY = setDefault(parameters["WindowY"]);
|
||||
const pLineHeight = setDefault(parameters["LineHeight"]);
|
||||
const pAdjustMessageX = toNumber(parameters["AdjustMessageX"], 0);
|
||||
const pAdjustMessageY = toNumber(parameters["AdjustMessageY"], 0);
|
||||
const pMessageFontSize = setDefault(parameters["MessageFontSize"]);
|
||||
const pWindowOpacity = setDefault(parameters["WindowOpacity"]);
|
||||
const pMaskImage = setDefault(parameters["MaskImage"]);
|
||||
const pNoMaskOpacity = setDefault(parameters["NoMaskOpacity"]);
|
||||
const pFixIconY = toBoolean(parameters["FixIconY"]);
|
||||
const pNameBoxAdjustX = setDefault(parameters["NameBoxAdjustX"]);
|
||||
const pNameBoxAdjustY = setDefault(parameters["NameBoxAdjustY"]);
|
||||
const pNameBoxFontSize = setDefault(parameters["NameBoxFontSize"]);
|
||||
const pNameBoxOpacity = setDefault(parameters["NameBoxOpacity"]);
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Scene_Message
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// MZのみのクラスなので存在しない場合は無視
|
||||
if (typeof Scene_Message !== "undefined") {
|
||||
/**
|
||||
* ●メッセージウィンドウのサイズ&配置
|
||||
*/
|
||||
Scene_Message.prototype.messageWindowRect = function () {
|
||||
// 横幅
|
||||
let ww = Graphics.boxWidth;
|
||||
if (pWindowWidth != null) {
|
||||
// とりあえず最大領域を確保しておく。
|
||||
// ※値が小さいとはみ出した文字が表示されないため。
|
||||
ww = Graphics.width;
|
||||
}
|
||||
// 縦幅
|
||||
let wh = this.calcWindowHeight(4, false) + 8;
|
||||
if (pWindowHeight != null) {
|
||||
// ダミーのウィンドウを定義して計算
|
||||
// ※この値は選択肢を呼んだ場合に参照される。
|
||||
const dummyWindow = new Window_Message(new Rectangle(0, 0, 0, 0));
|
||||
wh = dummyWindow.calcWindowHeight();
|
||||
}
|
||||
// 座標はそのまま(updatePlacementで処理)
|
||||
const wx = (Graphics.boxWidth - ww) / 2;
|
||||
const wy = 0;
|
||||
return new Rectangle(wx, wy, ww, wh);
|
||||
};
|
||||
}
|
||||
|
||||
// /**
|
||||
// * ●ウィンドウの生成
|
||||
// * ※PicturePriorityCustomize.jsと併用する場合は重複につき注釈化
|
||||
// * ※他にも競合するプラグインがあるので保留
|
||||
// */
|
||||
// const _Scene_Message_createAllWindows = Scene_Message.prototype.createAllWindows;
|
||||
// Scene_Message.prototype.createAllWindows = function() {
|
||||
// _Scene_Message_createAllWindows.apply(this, arguments);
|
||||
//
|
||||
// //--------------------------------------------------------------------
|
||||
// // 名前欄の位置変更時、下に隠れたメッセージウィンドウが消えないよう調整
|
||||
// // ※WindowLayer.prototype.renderの挙動によって、
|
||||
// // ウィンドウは重ねられない仕様なので、Scene_Message直下に移動する。
|
||||
// //--------------------------------------------------------------------
|
||||
// // メッセージウィンドウ
|
||||
// this.addChild(this._windowLayer.removeChild(this._messageWindow));
|
||||
// // 名前ウィンドウ
|
||||
// this.addChild(this._windowLayer.removeChild(this._nameBoxWindow));
|
||||
// // UIエリアの幅を考慮して加算
|
||||
// // this._messageWindow.x += this._windowLayer.x;
|
||||
// // this._nameBoxWindow.x += this._windowLayer.x;
|
||||
// };
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Window_Message
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
let mInitialHeight = 0;
|
||||
|
||||
/**
|
||||
* ●メッセージウィンドウの初期化
|
||||
*/
|
||||
const _Window_Message_initialize = Window_Message.prototype.initialize;
|
||||
Window_Message.prototype.initialize = function (rect) {
|
||||
_Window_Message_initialize.apply(this, arguments);
|
||||
|
||||
// 不透明度
|
||||
if (pWindowOpacity != null) {
|
||||
this.backOpacity = eval(pWindowOpacity);
|
||||
}
|
||||
|
||||
// マスク
|
||||
if (pMaskImage != null) {
|
||||
this._maskSprite = new Sprite();
|
||||
this._maskSprite.bitmap = ImageManager.loadSystem(pMaskImage);
|
||||
this.addChild(this._maskSprite);
|
||||
this.backSprite().mask = this._maskSprite;
|
||||
}
|
||||
|
||||
// メッセージ用スプライトを位置調整
|
||||
this.contentsSprite().x += pAdjustMessageX;
|
||||
this.contentsSprite().y += pAdjustMessageY;
|
||||
|
||||
mInitialHeight = this.height;
|
||||
};
|
||||
|
||||
/*
|
||||
* Window_Message.prototype.createContentsが未定義の場合は事前に定義
|
||||
* ※これをしておかないと以後のWindow_Base側への追記が反映されない。
|
||||
*/
|
||||
if (
|
||||
Window_Message.prototype.createContents ==
|
||||
Window_Base.prototype.createContents
|
||||
) {
|
||||
Window_Message.prototype.createContents = function () {
|
||||
Window_Base.prototype.createContents.apply(this, arguments);
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* ●コンテンツ作成
|
||||
*/
|
||||
const _Window_Message_createContents =
|
||||
Window_Message.prototype.createContents;
|
||||
Window_Message.prototype.createContents = function () {
|
||||
_Window_Message_createContents.apply(this, arguments);
|
||||
|
||||
// 縦幅が変更されている場合はマスクの対象外なのでクリアする。
|
||||
// ※想定の縦幅以外はうまく表示できないため
|
||||
if (this._maskSprite && mInitialHeight != this.height) {
|
||||
this.backSprite().mask = null;
|
||||
this._maskSprite.visible = false;
|
||||
|
||||
// マスク対象外の不透明度
|
||||
if (pNoMaskOpacity != null) {
|
||||
this.backOpacity = eval(pNoMaskOpacity);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* ●メッセージウィンドウの配置
|
||||
* ※Y座標のみウィンドウ位置で変動するため、ここで制御されている。
|
||||
*/
|
||||
const _Window_Message_updatePlacement =
|
||||
Window_Message.prototype.updatePlacement;
|
||||
Window_Message.prototype.updatePlacement = function () {
|
||||
let changeFlg = false;
|
||||
|
||||
// ※サイズを参照して配置を決めているため、先に設定しておく。
|
||||
// 横幅の更新
|
||||
if (pWindowWidth != null) {
|
||||
const width = eval(pWindowWidth);
|
||||
if (this.width != width) {
|
||||
this.width = width;
|
||||
changeFlg = true;
|
||||
}
|
||||
}
|
||||
// 縦幅の更新
|
||||
if (pWindowHeight != null) {
|
||||
const height = this.calcWindowHeight();
|
||||
if (this.height != height) {
|
||||
this.height = height;
|
||||
changeFlg = true;
|
||||
}
|
||||
}
|
||||
|
||||
// いずれかを更新した場合
|
||||
if (changeFlg) {
|
||||
// 描画領域を更新
|
||||
// これをやらないと文字が表示されなくなる。
|
||||
this.createContents();
|
||||
// サイズを文章の表示領域へ反映
|
||||
// これをやらないと改ページ判定がおかしくなる。
|
||||
this.contents.resize(this.width, this.height);
|
||||
}
|
||||
|
||||
// 元の処理
|
||||
_Window_Message_updatePlacement.apply(this, arguments);
|
||||
|
||||
// X座標
|
||||
if (pWindowX != null) {
|
||||
this.x = eval(pWindowX);
|
||||
}
|
||||
|
||||
// Y座標
|
||||
if (pWindowY != null) {
|
||||
this.y = eval(pWindowY);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 【独自】ウィンドウの高さを計算する。
|
||||
*/
|
||||
Window_Message.prototype.calcWindowHeight = function () {
|
||||
return eval(pWindowHeight);
|
||||
};
|
||||
|
||||
if (pLineHeight != null) {
|
||||
/**
|
||||
* ●メッセージウィンドウの一行当たりの縦幅
|
||||
*/
|
||||
Window_Message.prototype.lineHeight = function () {
|
||||
return eval(pLineHeight);
|
||||
};
|
||||
}
|
||||
|
||||
// Window_Message.prototype.needsNewPage = function(textState) {
|
||||
// alert(textState.y + textState.height + " > " + this.contents.height);
|
||||
|
||||
// return (
|
||||
// !this.isEndOfText(textState) &&
|
||||
// textState.y + textState.height > this.contents.height
|
||||
// );
|
||||
// };
|
||||
|
||||
/**
|
||||
* ●アイコンのY座標修正
|
||||
*/
|
||||
if (pFixIconY) {
|
||||
/*
|
||||
* Window_Messageのメソッドが未定義の場合は事前に定義
|
||||
* ※これをしておかないと以後のWindow_Base側への追記が反映されない。
|
||||
*/
|
||||
if (
|
||||
Window_Message.prototype.processDrawIcon ==
|
||||
Window_Base.prototype.processDrawIcon
|
||||
) {
|
||||
Window_Message.prototype.processDrawIcon = function (
|
||||
iconIndex,
|
||||
textState
|
||||
) {
|
||||
Window_Base.prototype.processDrawIcon.apply(this, arguments);
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* ●アイコンの描画
|
||||
*/
|
||||
const _Window_Message_processDrawIcon =
|
||||
Window_Message.prototype.processDrawIcon;
|
||||
Window_Message.prototype.processDrawIcon = function (iconIndex, textState) {
|
||||
// 描画しない場合は処理終了
|
||||
if (!textState.drawing) {
|
||||
_Window_Message_processDrawIcon.apply(this, arguments);
|
||||
return;
|
||||
}
|
||||
|
||||
// アイコンのY座標の算出に縦幅を考慮
|
||||
const iconY =
|
||||
textState.y + (this.lineHeight() - ImageManager.iconHeight) / 2;
|
||||
this.drawIcon(iconIndex, textState.x + 2, iconY);
|
||||
textState.x += ImageManager.iconWidth + 4;
|
||||
};
|
||||
}
|
||||
|
||||
if (pMessageFontSize != null) {
|
||||
/*
|
||||
* Window_Messageのメソッドが未定義の場合は事前に定義
|
||||
* ※これをしておかないと以後のWindow_Base側への追記が反映されない。
|
||||
*/
|
||||
if (
|
||||
Window_Message.prototype.resetFontSettings ==
|
||||
Window_Base.prototype.resetFontSettings
|
||||
) {
|
||||
Window_Message.prototype.resetFontSettings = function () {
|
||||
Window_Base.prototype.resetFontSettings.apply(this, arguments);
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* ●フォントサイズの設定
|
||||
*/
|
||||
const _Window_Message_resetFontSettings =
|
||||
Window_Message.prototype.resetFontSettings;
|
||||
Window_Message.prototype.resetFontSettings = function () {
|
||||
_Window_Message_resetFontSettings.apply(this, arguments);
|
||||
|
||||
this.contents.fontSize = eval(pMessageFontSize);
|
||||
};
|
||||
}
|
||||
|
||||
if (pMaskImage != null) {
|
||||
/*
|
||||
* Window_Messageのメソッドが未定義の場合は事前に定義
|
||||
*/
|
||||
if (
|
||||
Window_Message.prototype.showBackgroundDimmer ==
|
||||
Window_Base.prototype.showBackgroundDimmer
|
||||
) {
|
||||
Window_Message.prototype.showBackgroundDimmer = function () {
|
||||
Window_Base.prototype.showBackgroundDimmer.apply(this, arguments);
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* ●暗いウィンドウの表示
|
||||
*/
|
||||
const _Window_Message_showBackgroundDimmer =
|
||||
Window_Message.prototype.showBackgroundDimmer;
|
||||
Window_Message.prototype.showBackgroundDimmer = function () {
|
||||
this.backSprite().mask = null;
|
||||
this._maskSprite.visible = false;
|
||||
|
||||
_Window_Message_showBackgroundDimmer.apply(this, arguments);
|
||||
};
|
||||
|
||||
/*
|
||||
* Window_Messageのメソッドが未定義の場合は事前に定義
|
||||
*/
|
||||
if (
|
||||
Window_Message.prototype.hideBackgroundDimmer ==
|
||||
Window_Base.prototype.hideBackgroundDimmer
|
||||
) {
|
||||
Window_Message.prototype.hideBackgroundDimmer = function () {
|
||||
Window_Base.prototype.hideBackgroundDimmer.apply(this, arguments);
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* ●暗いウィンドウの非表示
|
||||
*/
|
||||
const _Window_Message_hideBackgroundDimmer =
|
||||
Window_Message.prototype.hideBackgroundDimmer;
|
||||
Window_Message.prototype.hideBackgroundDimmer = function () {
|
||||
this.backSprite().mask = this._maskSprite;
|
||||
this._maskSprite.visible = true;
|
||||
|
||||
_Window_Message_hideBackgroundDimmer.apply(this, arguments);
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 【独自】文字描画用のスプライトを取得
|
||||
*/
|
||||
Window_Message.prototype.contentsSprite = function () {
|
||||
// MZ用
|
||||
if (this._contentsSprite) {
|
||||
return this._contentsSprite;
|
||||
// MV用
|
||||
} else if (this._windowContentsSprite) {
|
||||
return this._windowContentsSprite;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 【独自】背景描画用のスプライトを取得
|
||||
*/
|
||||
Window_Message.prototype.backSprite = function () {
|
||||
// MZ用
|
||||
if (this._backSprite) {
|
||||
return this._backSprite;
|
||||
// MV用
|
||||
} else if (this._windowBackSprite) {
|
||||
return this._windowBackSprite;
|
||||
}
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Window_NameBox
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// MZのみのクラスなので存在しない場合は無視
|
||||
if (typeof Window_NameBox !== "undefined") {
|
||||
/**
|
||||
* ●名前欄の初期化
|
||||
*/
|
||||
const _Window_NameBox_initialize = Window_NameBox.prototype.initialize;
|
||||
Window_NameBox.prototype.initialize = function (rect) {
|
||||
_Window_NameBox_initialize.apply(this, arguments);
|
||||
|
||||
// 不透明度
|
||||
if (pNameBoxOpacity != null) {
|
||||
this.backOpacity = eval(pNameBoxOpacity);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* ●名前欄の配置
|
||||
*/
|
||||
const _Window_NameBox_updatePlacement =
|
||||
Window_NameBox.prototype.updatePlacement;
|
||||
Window_NameBox.prototype.updatePlacement = function () {
|
||||
_Window_NameBox_updatePlacement.apply(this, arguments);
|
||||
|
||||
// X座標補正
|
||||
if (pNameBoxAdjustX != null) {
|
||||
this.x += eval(pNameBoxAdjustX);
|
||||
}
|
||||
// Y座標補正
|
||||
if (pNameBoxAdjustY != null) {
|
||||
this.y += eval(pNameBoxAdjustY);
|
||||
}
|
||||
};
|
||||
|
||||
if (pNameBoxFontSize != null) {
|
||||
/*
|
||||
* Window_NameBoxのメソッドが未定義の場合は事前に定義
|
||||
* ※これをしておかないと以後のWindow_Base側への追記が反映されない。
|
||||
*/
|
||||
if (
|
||||
Window_NameBox.prototype.resetFontSettings ==
|
||||
Window_Base.prototype.resetFontSettings
|
||||
) {
|
||||
Window_NameBox.prototype.resetFontSettings = function () {
|
||||
Window_Base.prototype.resetFontSettings.apply(this, arguments);
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* ●フォントサイズの設定
|
||||
*/
|
||||
const _Window_NameBox_resetFontSettings =
|
||||
Window_Message.prototype.resetFontSettings;
|
||||
Window_NameBox.prototype.resetFontSettings = function () {
|
||||
_Window_NameBox_resetFontSettings.apply(this, arguments);
|
||||
|
||||
this.contents.fontSize = eval(pNameBoxFontSize);
|
||||
};
|
||||
}
|
||||
}
|
||||
})();
|
||||
418
js/plugins/ParallelBgs.js
Normal file
418
js/plugins/ParallelBgs.js
Normal file
|
|
@ -0,0 +1,418 @@
|
|||
//=============================================================================
|
||||
// ParallelBgs.js
|
||||
// ----------------------------------------------------------------------------
|
||||
// (C)2016 Triacontane
|
||||
// This software is released under the MIT License.
|
||||
// http://opensource.org/licenses/mit-license.php
|
||||
// ----------------------------------------------------------------------------
|
||||
// Version
|
||||
// 1.1.1 2021/03/06 BGMのフェードアウトのイベントコマンドでは現在のラインのBGSのみフェードアウトするよう修正
|
||||
// 1.1.0 2020/12/14 MZ向けに全面的に修正
|
||||
// 1.0.3 2020/02/02 ヘルプのプラグインコマンド「PB_BGSライン変更」が間違っていたので「PB_BGS_ライン変更」に修正(コード修正なし)
|
||||
// 1.0.2 2017/01/05 BGSの演奏状態によっては、セーブ&ロードした際に一部のBGSが演奏されなくなる現象の修正(byくらむぼん氏)
|
||||
// 1.0.1 2016/11/16 BGSをプレーしていない状態でセーブ&ロードするとエラーになる現象の修正
|
||||
// 1.0.0 2016/11/12 初版
|
||||
// ----------------------------------------------------------------------------
|
||||
// [Blog] : http://triacontane.blogspot.jp/
|
||||
// [Twitter]: https://twitter.com/triacontane/
|
||||
// [GitHub] : https://github.com/triacontane/
|
||||
//=============================================================================
|
||||
|
||||
/*:ja
|
||||
* @plugindesc BGS並行演奏プラグイン
|
||||
* @target MZ
|
||||
* @url https://github.com/triacontane/RPGMakerMV/tree/mz_master/ParallelBgs.js
|
||||
* @base PluginCommonBase
|
||||
* @author トリアコンタン
|
||||
*
|
||||
* @command CHANGE_LINE
|
||||
* @text ライン変更
|
||||
* @desc 現在のBGSの演奏ラインを変更します。演奏ラインの異なるBGSは並行して演奏できます。
|
||||
*
|
||||
* @arg line
|
||||
* @text ライン番号
|
||||
* @desc 変更するBGSのライン番号です。
|
||||
* @default 1
|
||||
* @type number
|
||||
*
|
||||
* @command ALL_STOP
|
||||
* @text 全停止
|
||||
* @desc 全ての演奏中のBGSを停止します。
|
||||
*
|
||||
* @command FADEOUT_FOR_SE
|
||||
* @text SE演奏時フェードアウト
|
||||
* @desc SEが演奏されたタイミングでBGSを自動フェードアウトします。
|
||||
*
|
||||
* @arg type
|
||||
* @text フェードアウト種別
|
||||
* @desc フェードアウトのやり方です。
|
||||
* @default 1
|
||||
* @type select
|
||||
* @option 0:フェードアウトせずに通常通りSEを演奏します。
|
||||
* @value 0
|
||||
* @option 1:SE演奏と同時にフェードアウトを開始します。
|
||||
* @value 1
|
||||
* @option 2:フェードアウトが完了してからSE演奏します。
|
||||
* @value 2
|
||||
*
|
||||
* @arg fadeTime
|
||||
* @text フェード時間
|
||||
* @desc 自動フェードアウトに掛かる時間(フレーム)です。
|
||||
* @default 60
|
||||
* @type number
|
||||
*
|
||||
* @help ParallelBgs.js
|
||||
*
|
||||
* 複数のBGSを並行して演奏できます。
|
||||
* プラグインコマンドからBGSの演奏ラインを変更すると元のBGSを演奏したまま、
|
||||
* 新しく別のBGSを演奏することができます。
|
||||
* 並行演奏しているBGSはそれぞれ個別に音量やピッチ、左右バランスを調節できます。
|
||||
* 演奏ラインのデフォルトは[1]です。
|
||||
*
|
||||
* ラインの数に制限はありませんが、あまりに大量のBGSを
|
||||
* 同時に演奏しようとすると動作に影響がでる恐れがあります。
|
||||
*
|
||||
* なお、マップで指定するオート演奏のBGSはラインが[1]で固定になります。
|
||||
*
|
||||
* 利用規約:
|
||||
* 作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)
|
||||
* についても制限はありません。
|
||||
* このプラグインはもうあなたのものです。
|
||||
*/
|
||||
|
||||
(function () {
|
||||
"use strict";
|
||||
const script = document.currentScript;
|
||||
|
||||
PluginManagerEx.registerCommand(script, "CHANGE_LINE", (args) => {
|
||||
$gameSystem.setBgsLine(args.line);
|
||||
});
|
||||
|
||||
PluginManagerEx.registerCommand(script, "ALL_STOP", (args) => {
|
||||
AudioManager.stopAllBgs();
|
||||
});
|
||||
|
||||
PluginManagerEx.registerCommand(script, "FADEOUT_FOR_SE", (args) => {
|
||||
$gameSystem.setBgsFadeForSe(args.type, args.fadeTime);
|
||||
});
|
||||
|
||||
const _Game_Interpreter_command246 = Game_Interpreter.prototype.command246;
|
||||
Game_Interpreter.prototype.command246 = function (params) {
|
||||
AudioManager._bgsFadeOutByLine = true;
|
||||
const result = _Game_Interpreter_command246.apply(this, arguments);
|
||||
AudioManager._bgsFadeOutByLine = false;
|
||||
return result;
|
||||
};
|
||||
|
||||
//=============================================================================
|
||||
// Game_System
|
||||
// BGS演奏ラインを変更します。
|
||||
//=============================================================================
|
||||
const _Game_System_initialize = Game_System.prototype.initialize;
|
||||
Game_System.prototype.initialize = function () {
|
||||
_Game_System_initialize.apply(this, arguments);
|
||||
this.initBgsMember();
|
||||
};
|
||||
|
||||
Game_System.prototype.initBgsMember = function () {
|
||||
this.setBgsLine(this.getBgsLine());
|
||||
this.setBgsFadeForSe(this.getBgsFadeForSe(), this.getBgsFadeTime());
|
||||
};
|
||||
|
||||
Game_System.prototype.getBgsLine = function () {
|
||||
return this._bgsLine || 1;
|
||||
};
|
||||
|
||||
Game_System.prototype.setBgsLine = function (value) {
|
||||
this._bgsLine = value;
|
||||
AudioManager.setBgsLineIndex(value);
|
||||
};
|
||||
|
||||
Game_System.prototype.getBgsFadeForSe = function () {
|
||||
return this._bgsFadeForPlayingSe || 0;
|
||||
};
|
||||
|
||||
Game_System.prototype.setBgsFadeForSe = function (se, time) {
|
||||
this._bgsFadeForPlayingSe = se;
|
||||
this._bgsFadeTime = time;
|
||||
AudioManager.setBgsFadeForSe(se);
|
||||
};
|
||||
|
||||
Game_System.prototype.getBgsFadeTime = function () {
|
||||
return this._bgsFadeTime || 1;
|
||||
};
|
||||
|
||||
const _Game_System_onAfterLoad = Game_System.prototype.onAfterLoad;
|
||||
Game_System.prototype.onAfterLoad = function () {
|
||||
_Game_System_onAfterLoad.apply(this, arguments);
|
||||
this.initBgsMember();
|
||||
};
|
||||
|
||||
const _Game_Map_autoplay = Game_Map.prototype.autoplay;
|
||||
Game_Map.prototype.autoplay = function () {
|
||||
AudioManager.multiLineDisable = true;
|
||||
_Game_Map_autoplay.apply(this, arguments);
|
||||
AudioManager.multiLineDisable = false;
|
||||
};
|
||||
|
||||
//=============================================================================
|
||||
// AudioManager
|
||||
// 複数のBGS演奏ラインを管理します。
|
||||
//=============================================================================
|
||||
AudioManager.multiLineDisable = false;
|
||||
AudioManager._bgsLineIndex = 1;
|
||||
AudioManager._bgsFadeForSe = 0;
|
||||
AudioManager._bgsFadeTime = 1;
|
||||
AudioManager._allBgsBuffer = [];
|
||||
AudioManager._currentAllBgs = [];
|
||||
AudioManager._delaySeStack = [];
|
||||
AudioManager._allStop = false;
|
||||
AudioManager._stopAllBgs = true;
|
||||
AudioManager._bgsFading = false;
|
||||
AudioManager._bgsFadeCounter = 0;
|
||||
|
||||
const _AudioManager_bgsVolume = Object.getOwnPropertyDescriptor(
|
||||
AudioManager,
|
||||
"bgsVolume"
|
||||
);
|
||||
Object.defineProperty(AudioManager, "bgsVolume", {
|
||||
get: function () {
|
||||
return _AudioManager_bgsVolume.get.call(this);
|
||||
},
|
||||
set: function (value) {
|
||||
_AudioManager_bgsVolume.set.call(this, value);
|
||||
const nowBgs = this._currentBgs;
|
||||
this.iterateAllBgs(
|
||||
function () {
|
||||
if (nowBgs !== this._currentBgs)
|
||||
this.updateBgsParameters(this._currentBgs);
|
||||
}.bind(this)
|
||||
);
|
||||
},
|
||||
configurable: true,
|
||||
});
|
||||
|
||||
Object.defineProperty(AudioManager, "_bgsBuffer", {
|
||||
get: function () {
|
||||
return this._allBgsBuffer[this.getBgsLineIndex()];
|
||||
},
|
||||
set: function (value) {
|
||||
this._allBgsBuffer[this.getBgsLineIndex()] = value;
|
||||
},
|
||||
});
|
||||
|
||||
Object.defineProperty(AudioManager, "_currentBgs", {
|
||||
get: function () {
|
||||
return this._currentAllBgs[this.getBgsLineIndex()];
|
||||
},
|
||||
set: function (value) {
|
||||
this._currentAllBgs[this.getBgsLineIndex()] = value;
|
||||
},
|
||||
});
|
||||
|
||||
AudioManager.getBgsLineIndex = function () {
|
||||
return this.multiLineDisable ? 1 : this._bgsLineIndex;
|
||||
};
|
||||
|
||||
AudioManager.setBgsLineIndex = function (index) {
|
||||
this._bgsLineIndex = index;
|
||||
};
|
||||
|
||||
AudioManager.setBgsFadeForSe = function (value) {
|
||||
this._bgsFadeForSe = value;
|
||||
};
|
||||
|
||||
AudioManager.setBgsFadeTime = function (value) {
|
||||
this._bgsFadeTime = value;
|
||||
};
|
||||
|
||||
const _AudioManager_playBgs = AudioManager.playBgs;
|
||||
AudioManager.playBgs = function (bgs, pos) {
|
||||
if (!bgs) return;
|
||||
this._stopAllBgs = false;
|
||||
if (Array.isArray(bgs)) {
|
||||
this.playAllBgs(bgs);
|
||||
} else {
|
||||
_AudioManager_playBgs.apply(this, arguments);
|
||||
}
|
||||
this._stopAllBgs = true;
|
||||
};
|
||||
|
||||
AudioManager.playAllBgs = function (bgsArray) {
|
||||
this.stopAllBgs();
|
||||
const prevIndex = this._bgsLineIndex;
|
||||
this._bgsLineIndex = 1;
|
||||
bgsArray.forEach(function (bgs, index) {
|
||||
this._bgsLineIndex = index;
|
||||
this.playBgs(bgs, null);
|
||||
}, this);
|
||||
this._bgsLineIndex = prevIndex;
|
||||
};
|
||||
|
||||
const _AudioManager_replayBgs = AudioManager.replayBgs;
|
||||
AudioManager.replayBgs = function (bgs) {
|
||||
if (!bgs) return;
|
||||
if (Array.isArray(bgs)) {
|
||||
this.replayAllBgs(bgs);
|
||||
} else {
|
||||
_AudioManager_replayBgs.apply(this, arguments);
|
||||
}
|
||||
};
|
||||
|
||||
AudioManager.replayAllBgs = function (bgsArray) {
|
||||
this.stopAllBgs();
|
||||
const prevIndex = this._bgsLineIndex;
|
||||
this._bgsLineIndex = 1;
|
||||
bgsArray.forEach(function (bgs, index) {
|
||||
this._bgsLineIndex = index;
|
||||
this.replayBgs(bgs);
|
||||
}, this);
|
||||
this._bgsLineIndex = prevIndex;
|
||||
};
|
||||
|
||||
const _AudioManager_saveBgs = AudioManager.saveBgs;
|
||||
AudioManager.saveBgs = function () {
|
||||
const bgsArray = [];
|
||||
this.iterateAllBgs(
|
||||
function () {
|
||||
bgsArray[this._bgsLineIndex] = _AudioManager_saveBgs.apply(
|
||||
this,
|
||||
arguments
|
||||
);
|
||||
}.bind(this)
|
||||
);
|
||||
return bgsArray.length > 1 ? bgsArray : bgsArray[0];
|
||||
};
|
||||
|
||||
const _AudioManager_stopBgs = AudioManager.stopBgs;
|
||||
AudioManager.stopBgs = function () {
|
||||
if (!this._stopAllBgs) {
|
||||
_AudioManager_stopBgs.apply(this, arguments);
|
||||
} else {
|
||||
this.stopAllBgs();
|
||||
}
|
||||
};
|
||||
|
||||
AudioManager.stopAllBgs = function () {
|
||||
this.iterateAllBgs(
|
||||
function () {
|
||||
_AudioManager_stopBgs.apply(this, arguments);
|
||||
}.bind(this)
|
||||
);
|
||||
};
|
||||
|
||||
const _AudioManager_fadeOutBgs = AudioManager.fadeOutBgs;
|
||||
AudioManager.fadeOutBgs = function (time) {
|
||||
if (this._bgsFadeOutByLine) {
|
||||
_AudioManager_fadeOutBgs.call(this, time);
|
||||
} else {
|
||||
this.iterateAllBgs(
|
||||
function () {
|
||||
_AudioManager_fadeOutBgs.call(this, time);
|
||||
}.bind(this)
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
const _AudioManager_fadeInBgs = AudioManager.fadeInBgs;
|
||||
AudioManager.fadeInBgs = function (time) {
|
||||
this.iterateAllBgs(
|
||||
function () {
|
||||
_AudioManager_fadeInBgs.call(this, time);
|
||||
}.bind(this)
|
||||
);
|
||||
};
|
||||
|
||||
AudioManager.iterateAllBgs = function (callBack) {
|
||||
const prevIndex = this._bgsLineIndex;
|
||||
Object.keys(this._allBgsBuffer).forEach(function (index) {
|
||||
this._bgsLineIndex = index;
|
||||
callBack(this._bgsBuffer);
|
||||
}, this);
|
||||
this._bgsLineIndex = prevIndex;
|
||||
};
|
||||
|
||||
const _AudioManager_playSe = AudioManager.playSe;
|
||||
AudioManager.playSe = function (se) {
|
||||
if (this.isNeedFadeOut()) {
|
||||
this.fadeOutBgsForSe();
|
||||
}
|
||||
if (
|
||||
this._bgsFadeForSe === 2 &&
|
||||
this._currentBgs &&
|
||||
this._bgsFadeCounter > 0
|
||||
) {
|
||||
this._delaySeStack.push(se);
|
||||
} else {
|
||||
_AudioManager_playSe.apply(this, arguments);
|
||||
}
|
||||
};
|
||||
|
||||
AudioManager.updateBgsFade = function () {
|
||||
if (this.isNeedFadeIn()) {
|
||||
this.fadeInBgsForSe();
|
||||
}
|
||||
if (this._bgsFadeCounter > 0) {
|
||||
this._bgsFadeCounter--;
|
||||
if (this._bgsFadeCounter === 0) {
|
||||
this.playDelayedSe();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
AudioManager.fadeOutBgsForSe = function () {
|
||||
const currentAllBgs = this._currentAllBgs.clone();
|
||||
this.fadeOutBgs(this._bgsFadeTime);
|
||||
this._currentAllBgs = currentAllBgs;
|
||||
this._bgsFading = true;
|
||||
this._bgsFadeCounter = this._bgsFadeTime * 60;
|
||||
};
|
||||
|
||||
AudioManager.isNeedFadeOut = function () {
|
||||
return !this._bgsFading && this._bgsFadeForSe !== 0;
|
||||
};
|
||||
|
||||
AudioManager.fadeInBgsForSe = function () {
|
||||
this.fadeInBgs(this._bgsFadeTime);
|
||||
this._bgsFading = false;
|
||||
this._bgsFadeCounter = 0;
|
||||
};
|
||||
|
||||
AudioManager.isNeedFadeIn = function () {
|
||||
return (
|
||||
this._bgsFading && !this.isPlayingAnySe() && this._bgsFadeCounter === 0
|
||||
);
|
||||
};
|
||||
|
||||
AudioManager.playDelayedSe = function () {
|
||||
while (this._delaySeStack.length > 0) {
|
||||
_AudioManager_playSe.call(this, this._delaySeStack.pop());
|
||||
}
|
||||
};
|
||||
|
||||
AudioManager.isPlayingAnySe = function () {
|
||||
return this._seBuffers.some(function (audio) {
|
||||
return audio.isExist();
|
||||
});
|
||||
};
|
||||
|
||||
//=============================================================================
|
||||
// WebAudio
|
||||
// 演奏が要求済みかどうかを返します。
|
||||
//=============================================================================
|
||||
WebAudio.prototype.isExist = function () {
|
||||
return this._autoPlay;
|
||||
};
|
||||
|
||||
//=============================================================================
|
||||
// SceneManager
|
||||
// AudioManagerの更新処理を呼び出します。
|
||||
//=============================================================================
|
||||
const _SceneManager_updateScene = SceneManager.updateScene;
|
||||
SceneManager.updateScene = function () {
|
||||
_SceneManager_updateScene.apply(this, arguments);
|
||||
if (this._scene) {
|
||||
AudioManager.updateBgsFade();
|
||||
}
|
||||
};
|
||||
})();
|
||||
506
js/plugins/PluginCommonBase.js
Normal file
506
js/plugins/PluginCommonBase.js
Normal file
|
|
@ -0,0 +1,506 @@
|
|||
//=============================================================================
|
||||
// RPG Maker MZ - Plugin Analysis Common Base
|
||||
//=============================================================================
|
||||
|
||||
/*:
|
||||
* @target MZ
|
||||
* @plugindesc Plugin Analysis Common Base
|
||||
* @author triacontane
|
||||
*
|
||||
* @help PluginCommonBase.js
|
||||
*
|
||||
* This plugin is a base plugin that is meant to be referenced from other plugins.
|
||||
* This plugin allows you to use the following control characters in a variety of situations.
|
||||
*
|
||||
* Usable Control Characters
|
||||
* \v[n] : nis converted to the value of the nth variable.
|
||||
* \s[n] : nis converted to the value (true, false) of the nth switch.
|
||||
* \ss[n] : nis converted to the value (true, false) of the nth self switch.
|
||||
* n -> A, B, C, D
|
||||
*
|
||||
* The situations where control characters can be used are as follows.
|
||||
* -Text display
|
||||
* -Notes field (*)
|
||||
* -Plugin command (*)
|
||||
* -Plugin parameter (*)
|
||||
* -Explanation fields for skills, etc.
|
||||
* *Only for plugins that take PluginCommonBase.js as a base.
|
||||
*
|
||||
* Below is an explanation for developers.
|
||||
*
|
||||
* Introducing this plugin as a base allows conversion of parameter types and control characters,
|
||||
* when analyzing parameters or fetching plugin commands/note fields, to be automated.
|
||||
* Standardizing control character allows conversion processing, and consistent
|
||||
* control character conversion specs to be implemented in all subordinate plugins.
|
||||
*
|
||||
* -Plugin Parameter Type Analysis
|
||||
* Automatically analyzes type and converts plugin parameters.
|
||||
* Also automatically converts control characters when the parameter is fetched.
|
||||
* Calls the following methods to fetch return values.
|
||||
* Always specifies "document.currentScript" in the argument.
|
||||
*
|
||||
* PluginManagerEx.createParameter(document.currentScript);
|
||||
*
|
||||
* However, if the end of the parameter name (regardless of case)
|
||||
* is one of the following values, the value will be returned as-is without control character or type conversion.
|
||||
* text
|
||||
* name
|
||||
* note
|
||||
* desc
|
||||
* script
|
||||
*
|
||||
* -Plugin Command Parameter Type Analysis
|
||||
* Automatically analyzes type and converts plugin command parameters.
|
||||
* Also automatically converts control characters when the parameter is fetched.
|
||||
* Uses the following in place of PluginManager.registerCommand.
|
||||
* Always specifies "document.currentScript" in the argument.
|
||||
*
|
||||
* PluginManagerEx.registerCommand(document.currentScript, "command", args => {
|
||||
* });
|
||||
*
|
||||
* -Notes Field Analysis
|
||||
* Retrieves notes field information from specified objects.
|
||||
* Automatically converts control characters.
|
||||
* Multiple names can be specified.
|
||||
*
|
||||
* PluginManagerEx.findMetaValue(obj, tagName1, tagName2...);
|
||||
*
|
||||
* -Dynamic Common Event Execution
|
||||
* Executions dynamic common events.
|
||||
* Dynamic common events are stacked parallel processed common events.
|
||||
* Use to execute as many common events with the same ID in parallel as you want.
|
||||
* It can register as many common events as you want and automatically discards those that have been executed.
|
||||
*
|
||||
* $gameMap.setupDynamicCommon(commonEventId);
|
||||
*
|
||||
*/
|
||||
|
||||
/*:ja
|
||||
* @target MZ
|
||||
* @plugindesc パラメータ解析を提供する共通基盤です
|
||||
* @author トリアコンタン
|
||||
*
|
||||
* @help PluginCommonBase.js
|
||||
*
|
||||
* 本プラグインは他のプラグインから参照されることを前提としたベースプラグインです。
|
||||
* 本プラグインを導入すると様々な場面で以下の制御文字が使えるようになります。
|
||||
*
|
||||
* 利用可能な制御文字
|
||||
* \v[n] : n番目の変数の値に変換されます。
|
||||
* \s[n] : n番目のスイッチの値(true, false)に変換されます。
|
||||
* \ss[n] : セルフスイッチの値(true, false)に変換されます。
|
||||
* n -> A, B, C, D
|
||||
*
|
||||
* 制御文字を利用可能な場面は以下の通りです。
|
||||
* ・文章の表示
|
||||
* ・メモ欄(※)
|
||||
* ・プラグインコマンド(※)
|
||||
* ・プラグインパラメータ(※)
|
||||
* ・スキルなどの説明欄
|
||||
* ※ PluginCommonBase.jsをベースとして取り込んだプラグインのみ
|
||||
*
|
||||
* 以下は開発者向けの解説です。
|
||||
*
|
||||
* このプラグインをベースとして取り込むことで、パラメータの解析や
|
||||
* プラグインコマンド、メモ欄の取得時にパラメータ型および制御文字の変換を自動化します。
|
||||
* 制御文字の変換処理を共通化することで配下の全てのプラグインで一貫した
|
||||
* 制御文字の変換仕様を実現します。
|
||||
*
|
||||
* ・プラグインパラメータの型解析
|
||||
* プラグインパラメータを自動で型解析し変換します。
|
||||
* また、パラメータ取得時に制御文字の変換を自動で行います。
|
||||
* 以下のメソッドを呼んで戻り値を取得します。
|
||||
* 引数には必ず「document.currentScript」を指定します。
|
||||
*
|
||||
* PluginManagerEx.createParameter(document.currentScript);
|
||||
*
|
||||
* ただし、パラメータ名の末尾が(大文字小文字問わず)以下の値の場合
|
||||
* 制御文字や型の変換は行われず、そのままの値を返します。
|
||||
* text
|
||||
* name
|
||||
* note
|
||||
* desc
|
||||
* script
|
||||
*
|
||||
* ・プラグインコマンドパラメータの型解析
|
||||
* プラグインコマンドパラメータを自動で型解析し変換します。
|
||||
* また、パラメータ取得時に制御文字の変換を自動で行います。
|
||||
* PluginManager.registerCommandの代わりに以下を使用します。
|
||||
* 引数には必ず「document.currentScript」を指定します。
|
||||
*
|
||||
* PluginManagerEx.registerCommand(document.currentScript, "command", args => {
|
||||
* });
|
||||
*
|
||||
* ・メモ欄の解析
|
||||
* 指定したオブジェクトからメモ欄情報を取得します。
|
||||
* 制御文字の変換を自動で行います。
|
||||
* 名称は複数指定することも可能です。
|
||||
*
|
||||
* PluginManagerEx.findMetaValue(obj, tagName1, tagName2...);
|
||||
*
|
||||
* ・動的コモンイベントの実行
|
||||
* 動的コモンイベントを実行できます。
|
||||
* 動的コモンイベントとは、スタック型の並列処理コモンイベントです。
|
||||
* 同一IDのコモンイベントも好きなだけ並列実行できます。
|
||||
* 実行が終わったものから自働で破棄されます。
|
||||
*
|
||||
* $gameMap.setupDynamicCommon(commonEventId);
|
||||
*/
|
||||
|
||||
(() => {
|
||||
"use strict";
|
||||
|
||||
/**
|
||||
* PluginParam
|
||||
*/
|
||||
class PluginParam {
|
||||
constructor(parameter, needParse = true) {
|
||||
if (needParse) {
|
||||
parameter = JSON.parse(JSON.stringify(parameter, this._paramReplacer));
|
||||
}
|
||||
this.setup(parameter);
|
||||
}
|
||||
|
||||
setup(parameter) {
|
||||
this._parameter = parameter;
|
||||
for (let paramName in parameter) {
|
||||
if (!parameter.hasOwnProperty(paramName)) {
|
||||
continue;
|
||||
}
|
||||
const subParam = parameter[paramName];
|
||||
if (this._isStructArray(subParam)) {
|
||||
subParam.forEach((subParamItem, index) => {
|
||||
subParam[index] = new PluginParam(subParamItem, false);
|
||||
});
|
||||
} else if (this._isStruct(subParam)) {
|
||||
parameter[paramName] = new PluginParam(subParam, false);
|
||||
}
|
||||
this._createAccessor(paramName);
|
||||
}
|
||||
}
|
||||
|
||||
_createAccessor(paramName) {
|
||||
Object.defineProperty(this, paramName, {
|
||||
get() {
|
||||
return this._convert(this._param(paramName), paramName);
|
||||
},
|
||||
set(value) {
|
||||
this._parameter[paramName] = value;
|
||||
},
|
||||
configurable: true,
|
||||
});
|
||||
}
|
||||
|
||||
_convert(param, paramName) {
|
||||
if (this._isStruct(param) || this._isStructArray(param)) {
|
||||
return param;
|
||||
} else if (Array.isArray(param)) {
|
||||
return param.map((paramItem) => this._convert(paramItem, paramName));
|
||||
}
|
||||
if (
|
||||
!this._findTextParamSuffixList().some((regExp) =>
|
||||
paramName.match(regExp)
|
||||
)
|
||||
) {
|
||||
return PluginManagerEx.convertVariables(param);
|
||||
} else {
|
||||
return String(param);
|
||||
}
|
||||
}
|
||||
|
||||
_findTextParamSuffixList() {
|
||||
return [/text$/gi, /name$/gi, /desc$/gi, /note$/gi, /script$/gi];
|
||||
}
|
||||
|
||||
_isStructArray(param) {
|
||||
return (
|
||||
Array.isArray(param) && (param.length === 0 || this._isStruct(param))
|
||||
);
|
||||
}
|
||||
|
||||
_isStruct(param) {
|
||||
return Object.prototype.toString.call(param) === "[object Object]";
|
||||
}
|
||||
|
||||
_param(name) {
|
||||
return this._parameter[name];
|
||||
}
|
||||
|
||||
_paramReplacer(key, value) {
|
||||
if (value === "null") {
|
||||
return value;
|
||||
}
|
||||
if (value[0] === '"' && value[value.length - 1] === '"') {
|
||||
return value;
|
||||
}
|
||||
try {
|
||||
return JSON.parse(value);
|
||||
} catch (e) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* PluginManagerEx
|
||||
*/
|
||||
class PluginManagerEx {
|
||||
static convertVariables(text, data = null) {
|
||||
if (text !== String(text)) {
|
||||
return text;
|
||||
}
|
||||
text = this.convertEscapeCharacters(text, data);
|
||||
if (text === "true") {
|
||||
return true;
|
||||
} else if (text === "false") {
|
||||
return false;
|
||||
} else if (Number(text) === parseFloat(text)) {
|
||||
return parseFloat(text);
|
||||
} else {
|
||||
return text;
|
||||
}
|
||||
}
|
||||
|
||||
static convertEscapeCharacters(text, data = null) {
|
||||
text = TextConverter.convertEscapeCharactersBase(text, data);
|
||||
text = this.convertEscapeCharactersEx(text, data);
|
||||
text = TextConverter.convertEscapeCharactersBase(text, data);
|
||||
return text;
|
||||
}
|
||||
|
||||
// Additional Escape Characters
|
||||
static convertEscapeCharactersEx(text, data = null) {
|
||||
text = text.replace(/\x1bS\[(.+)]/gi, (_, p1) => {
|
||||
return $gameSwitches ? $gameSwitches.value(parseInt(p1)) : "";
|
||||
});
|
||||
const key = this._selfSwitchKey;
|
||||
if (!key) {
|
||||
return text;
|
||||
}
|
||||
text = text.replace(/\x1bSS\[(.+)]/gi, (_, p1) => {
|
||||
key[2] = p1;
|
||||
return $gameSelfSwitches ? $gameSelfSwitches.value(key) : "";
|
||||
});
|
||||
return text;
|
||||
}
|
||||
|
||||
static createParameter(currentScript) {
|
||||
const paramText = PluginManager.parameters(
|
||||
this.findPluginName(currentScript)
|
||||
);
|
||||
return new PluginParam(paramText);
|
||||
}
|
||||
|
||||
static createCommandArgs(args) {
|
||||
const hasObject = Object.keys(args).some((key) => {
|
||||
return args[key].match(/^[\[{].*[}\]]$/);
|
||||
});
|
||||
if (hasObject) {
|
||||
return new PluginParam(args);
|
||||
}
|
||||
const newArgs = {};
|
||||
Object.keys(args).forEach((key) => {
|
||||
newArgs[key] = this.convertVariables(args[key]);
|
||||
});
|
||||
return newArgs;
|
||||
}
|
||||
|
||||
static findMetaValue(object, nameList) {
|
||||
if (!Array.isArray(nameList)) {
|
||||
nameList = [nameList];
|
||||
}
|
||||
const meta = this.findMetaProperty(object);
|
||||
this.generateSelfSwitchKey(object.id);
|
||||
for (const name of nameList) {
|
||||
if (meta.hasOwnProperty(name)) {
|
||||
return this.convertVariables(meta[name], object);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static findMetaObject(object, nameList) {
|
||||
if (!Array.isArray(nameList)) {
|
||||
nameList = [nameList];
|
||||
}
|
||||
const meta = this.findMetaProperty(object);
|
||||
this.generateSelfSwitchKey(object.id);
|
||||
for (const name of nameList) {
|
||||
if (meta.hasOwnProperty(name)) {
|
||||
return new PluginParam(meta[name]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static findMetaProperty(object) {
|
||||
const meta = object.meta;
|
||||
if (!meta) {
|
||||
throw new Error(`Meta property not found : ${object}`);
|
||||
}
|
||||
return meta;
|
||||
}
|
||||
|
||||
static findPluginName(currentScript) {
|
||||
return currentScript.src.replace(/^.*\/(.*).js$/, function () {
|
||||
return arguments[1];
|
||||
});
|
||||
}
|
||||
|
||||
static registerCommand(currentScript, commandName, funcName) {
|
||||
const pluginName = this.findPluginName(currentScript);
|
||||
const key = pluginName + ":" + commandName;
|
||||
const func =
|
||||
typeof funcName === "function"
|
||||
? funcName
|
||||
: Game_Interpreter.prototype[funcName];
|
||||
if (!func) {
|
||||
throw new Error(`Not found function Game_Interpreter : ${funcName}`);
|
||||
}
|
||||
PluginManager.registerCommand(pluginName, commandName, function (args) {
|
||||
func.call(this, PluginManagerEx.createCommandArgs(args, key));
|
||||
});
|
||||
}
|
||||
|
||||
static isExistPlugin(pluginName) {
|
||||
return Object.keys(PluginManager.parameters(pluginName)).length > 0;
|
||||
}
|
||||
|
||||
static generateSelfSwitchKey(eventId) {
|
||||
if (!$gameMap) {
|
||||
return;
|
||||
}
|
||||
this._selfSwitchKey = [$gameMap.mapId(), eventId, null];
|
||||
}
|
||||
|
||||
static findClassName(object) {
|
||||
const define = object.constructor.toString();
|
||||
if (define.match(/^class/)) {
|
||||
return define.replace(/class\s+(.*?)\s+[\s\S]*/m, "$1");
|
||||
}
|
||||
return define.replace(/function\s+(.*)\s*\([\s\S]*/m, "$1");
|
||||
}
|
||||
|
||||
static throwError(message, currentScript) {
|
||||
const pluginName = this.findPluginName(currentScript);
|
||||
throw new Error(`By ${pluginName} : ${message}`);
|
||||
}
|
||||
|
||||
static escapeXmlTag(text) {
|
||||
text = text.replace(/>?/gi, ">");
|
||||
return text.replace(/<?/gi, "<");
|
||||
}
|
||||
}
|
||||
window.PluginManagerEx = PluginManagerEx;
|
||||
|
||||
class TextConverter {
|
||||
// Copy of Window_Base.prototype.convertEscapeCharacters
|
||||
static convertEscapeCharactersBase(text, data = null) {
|
||||
text = text.replace(/\\/g, "\x1b");
|
||||
text = text.replace(/\x1b\x1b/g, "\\");
|
||||
text = text.replace(/\x1bV\[(\d+)]/gi, (_, p1) =>
|
||||
$gameVariables ? $gameVariables.value(parseInt(p1)) : ""
|
||||
);
|
||||
text = text.replace(/\x1bV\[(\d+)]/gi, (_, p1) =>
|
||||
$gameVariables ? $gameVariables.value(parseInt(p1)) : ""
|
||||
);
|
||||
text = text.replace(/\x1bN\[(\d+)]/gi, (_, p1) =>
|
||||
this.actorName(parseInt(p1))
|
||||
);
|
||||
text = text.replace(/\x1bP\[(\d+)]/gi, (_, p1) =>
|
||||
this.partyMemberName(parseInt(p1))
|
||||
);
|
||||
if ($dataSystem) {
|
||||
text = text.replace(/\x1bG/gi, TextManager.currencyUnit);
|
||||
}
|
||||
return text;
|
||||
}
|
||||
|
||||
static actorName(n) {
|
||||
const actor = n >= 1 && $gameActors ? $gameActors.actor(n) : null;
|
||||
return actor ? actor.name() : "";
|
||||
}
|
||||
|
||||
static partyMemberName(n) {
|
||||
const actor = n >= 1 && $gameParty ? $gameParty.members()[n - 1] : null;
|
||||
return actor ? actor.name() : "";
|
||||
}
|
||||
}
|
||||
|
||||
const _PluginManager_callCommand = PluginManager.callCommand;
|
||||
PluginManager.callCommand = function (self, pluginName, commandName, args) {
|
||||
PluginManagerEx.generateSelfSwitchKey(self.eventId());
|
||||
_PluginManager_callCommand.apply(this, arguments);
|
||||
};
|
||||
|
||||
const _Window_Base_convertEscapeCharacters =
|
||||
Window_Base.prototype.convertEscapeCharacters;
|
||||
Window_Base.prototype.convertEscapeCharacters = function (text) {
|
||||
text = _Window_Base_convertEscapeCharacters.apply(this, arguments);
|
||||
return PluginManagerEx.convertEscapeCharacters(text);
|
||||
};
|
||||
|
||||
const _Game_System_onAfterLoad = Game_System.prototype.onAfterLoad;
|
||||
Game_System.prototype.onAfterLoad = function () {
|
||||
_Game_System_onAfterLoad.apply(this, arguments);
|
||||
$gameMap.initDynamicEvents();
|
||||
};
|
||||
|
||||
/**
|
||||
* Game_Map
|
||||
* Support dynamic events.
|
||||
*/
|
||||
const _Game_Map_setupEvents = Game_Map.prototype.setupEvents;
|
||||
Game_Map.prototype.setupEvents = function () {
|
||||
_Game_Map_setupEvents.apply(this, arguments);
|
||||
this.initDynamicEvents();
|
||||
};
|
||||
|
||||
Game_Map.prototype.initDynamicEvents = function () {
|
||||
if (!this._dynamicEvents) {
|
||||
this._dynamicEvents = [];
|
||||
}
|
||||
};
|
||||
|
||||
Game_Map.prototype.isInterpreterOf = function (interpreter) {
|
||||
return this._interpreter === interpreter;
|
||||
};
|
||||
|
||||
Game_Map.prototype.setupDynamicCommon = function (id) {
|
||||
const event = $dataCommonEvents[id];
|
||||
if (event) {
|
||||
this.setupDynamicInterpreter(event.list);
|
||||
}
|
||||
};
|
||||
|
||||
Game_Map.prototype.setupDynamicInterpreter = function (list) {
|
||||
const interpreter = new Game_Interpreter();
|
||||
interpreter.setup(list, 0);
|
||||
this._dynamicEvents.push(interpreter);
|
||||
this._dynamicEvents = this._dynamicEvents.filter((interpreter) =>
|
||||
interpreter.isRunning()
|
||||
);
|
||||
};
|
||||
|
||||
const _Game_Map_updateEvents = Game_Map.prototype.updateEvents;
|
||||
Game_Map.prototype.updateEvents = function () {
|
||||
_Game_Map_updateEvents.apply(this, arguments);
|
||||
this._dynamicEvents.forEach((interpreter) => interpreter.update());
|
||||
};
|
||||
|
||||
/**
|
||||
* Game_Event
|
||||
*/
|
||||
Game_Event.prototype.findMeta = function (metaNames) {
|
||||
return PluginManagerEx.findMetaValue(this.event(), metaNames);
|
||||
};
|
||||
|
||||
/**
|
||||
* Game_Interpreter
|
||||
*/
|
||||
const _Game_Interpreter_setup = Game_Interpreter.prototype.setup;
|
||||
Game_Interpreter.prototype.setup = function (list, eventId) {
|
||||
_Game_Interpreter_setup.apply(this, arguments);
|
||||
if (eventId) {
|
||||
PluginManagerEx.generateSelfSwitchKey(eventId);
|
||||
}
|
||||
};
|
||||
})();
|
||||
116
js/plugins/TextPicture.js
Normal file
116
js/plugins/TextPicture.js
Normal file
|
|
@ -0,0 +1,116 @@
|
|||
//=============================================================================
|
||||
// RPG Maker MZ - Text Picture
|
||||
//=============================================================================
|
||||
|
||||
/*:
|
||||
* @target MZ
|
||||
* @plugindesc Displays text as a picture.
|
||||
* @author Yoji Ojima
|
||||
*
|
||||
* @help TextPicture.js
|
||||
*
|
||||
* This plugin provides a command to show text as a picture.
|
||||
*
|
||||
* Use it in the following procedure.
|
||||
* 1. Call the plugin command "Set Text Picture".
|
||||
* 2. Execute "Show Picture" without specifying an image.
|
||||
*
|
||||
* @command set
|
||||
* @text Set Text Picture
|
||||
* @desc Sets text to display as a picture.
|
||||
* After this, execute "Show Picture" without specifying an image.
|
||||
*
|
||||
* @arg text
|
||||
* @type multiline_string
|
||||
* @text Text
|
||||
* @desc Text to display as a picture.
|
||||
* Control characters are allowed.
|
||||
*/
|
||||
|
||||
/*:ja
|
||||
* @target MZ
|
||||
* @plugindesc テキストをピクチャとして表示します。
|
||||
* @author Yoji Ojima
|
||||
*
|
||||
* @help TextPicture.js
|
||||
*
|
||||
* このプラグインは、テキストをピクチャとして表示するコマンドを提供します。
|
||||
*
|
||||
* 次の手順で使用してください。
|
||||
* 1. プラグインコマンド「テキストピクチャの設定」を呼び出します。
|
||||
* 2. 画像を指定せずに「ピクチャの表示」を実行します。
|
||||
*
|
||||
* @command set
|
||||
* @text テキストピクチャの設定
|
||||
* @desc ピクチャとして表示するテキストを設定します。
|
||||
* この後、画像を指定せずに「ピクチャの表示」を実行してください。
|
||||
*
|
||||
* @arg text
|
||||
* @type multiline_string
|
||||
* @text テキスト
|
||||
* @desc ピクチャとして表示するテキストです。
|
||||
* 制御文字が使用可能です。
|
||||
*/
|
||||
|
||||
(() => {
|
||||
const pluginName = "TextPicture";
|
||||
let textPictureText = "";
|
||||
|
||||
PluginManager.registerCommand(pluginName, "set", (args) => {
|
||||
textPictureText = String(args.text);
|
||||
});
|
||||
|
||||
const _Game_Picture_show = Game_Picture.prototype.show;
|
||||
Game_Picture.prototype.show = function () {
|
||||
_Game_Picture_show.apply(this, arguments);
|
||||
if (this._name === "" && textPictureText) {
|
||||
this.mzkp_text = textPictureText;
|
||||
this.mzkp_textChanged = true;
|
||||
textPictureText = "";
|
||||
}
|
||||
};
|
||||
|
||||
const _Sprite_Picture_destroy = Sprite_Picture.prototype.destroy;
|
||||
Sprite_Picture.prototype.destroy = function () {
|
||||
destroyTextPictureBitmap(this.bitmap);
|
||||
_Sprite_Picture_destroy.apply(this, arguments);
|
||||
};
|
||||
|
||||
const _Sprite_Picture_updateBitmap = Sprite_Picture.prototype.updateBitmap;
|
||||
Sprite_Picture.prototype.updateBitmap = function () {
|
||||
_Sprite_Picture_updateBitmap.apply(this, arguments);
|
||||
if (this.visible && this._pictureName === "") {
|
||||
const picture = this.picture();
|
||||
const text = picture ? picture.mzkp_text || "" : "";
|
||||
const textChanged = picture && picture.mzkp_textChanged;
|
||||
if (this.mzkp_text !== text || textChanged) {
|
||||
this.mzkp_text = text;
|
||||
destroyTextPictureBitmap(this.bitmap);
|
||||
this.bitmap = createTextPictureBitmap(text);
|
||||
picture.mzkp_textChanged = false;
|
||||
}
|
||||
} else {
|
||||
this.mzkp_text = "";
|
||||
}
|
||||
};
|
||||
|
||||
function createTextPictureBitmap(text) {
|
||||
const tempWindow = new Window_Base(new Rectangle());
|
||||
const size = tempWindow.textSizeEx(text);
|
||||
tempWindow.padding = 0;
|
||||
tempWindow.move(0, 0, size.width, size.height);
|
||||
tempWindow.createContents();
|
||||
tempWindow.drawTextEx(text, 0, 0, 0);
|
||||
const bitmap = tempWindow.contents;
|
||||
tempWindow.contents = null;
|
||||
tempWindow.destroy();
|
||||
bitmap.mzkp_isTextPicture = true;
|
||||
return bitmap;
|
||||
}
|
||||
|
||||
function destroyTextPictureBitmap(bitmap) {
|
||||
if (bitmap && bitmap.mzkp_isTextPicture) {
|
||||
bitmap.destroy();
|
||||
}
|
||||
}
|
||||
})();
|
||||
6483
js/rmmz_core.js
Normal file
6483
js/rmmz_core.js
Normal file
File diff suppressed because it is too large
Load diff
3121
js/rmmz_managers.js
Normal file
3121
js/rmmz_managers.js
Normal file
File diff suppressed because it is too large
Load diff
11300
js/rmmz_objects.js
Normal file
11300
js/rmmz_objects.js
Normal file
File diff suppressed because it is too large
Load diff
3685
js/rmmz_scenes.js
Normal file
3685
js/rmmz_scenes.js
Normal file
File diff suppressed because it is too large
Load diff
3697
js/rmmz_sprites.js
Normal file
3697
js/rmmz_sprites.js
Normal file
File diff suppressed because it is too large
Load diff
6647
js/rmmz_windows.js
Normal file
6647
js/rmmz_windows.js
Normal file
File diff suppressed because it is too large
Load diff
12
package.json
Normal file
12
package.json
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"name": "rmmz-game",
|
||||
"main": "index.html",
|
||||
"chromium-args": "--force-color-profile=srgb --disable-devtools",
|
||||
"window": {
|
||||
"title": "~王子様・外伝~雌豚王子は何処まで落ちる",
|
||||
"width": 1280,
|
||||
"height": 720,
|
||||
"position": "center",
|
||||
"icon": "icon/icon.png"
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue