Wallpaper Engine

Wallpaper Engine

Neptune Live2D
 This topic has been pinned, so it's probably important
今天的风儿好喧嚣  [developer] 26 Jul, 2017 @ 10:13am
[Guide] Live2D Model Adaptation and Customization
A guide for Live2D model adaptation and customization.

This is a complete guide for everything about custom Live2D models, so it may be too long to read. If you've got a model which is already adapted for this app, it would be needless to read this!


Introduction
Neptune Live2D, as its name says, is just a Live2D project for showing Neptune on desktop at first, but later I found that some people would like other characters better, so I made this customization feature for it.

For some reason, the models which aren't in Neptunia series may not work as expected. I'm not guaranteeing it'll be well fixed though, because this project isn't intended to support other kind of models.

To apply any change, you may need to reload the wallpaper by clicking the refresh button or re-select this wallpaper in Wallpaper Engine browser.

You will lose all modifications in this project when it receives an update, please always keep a backup for your custom Live2D models.

The underlined features/properties and the entire subtitle feature are available only in this project, they are not part of the Live2D standard.

When editing JSON files, pay attention to the quotation marks and commas. According to JSON's specification, each string must stay between two double quotation marks, and every two objects or name/value pairs must be separated by a comma. A common mistake is using a " inside a string, the right way would be using " instead.
If you still get an error with JSON, you can validate your JSON file in here[jsonlint.com].

Preparation
What Live2D is
A 2D character animation engine. Official website[www.live2d.com]

Where you can find models of Neptunia series
Official mobile app[compileheart.com] or google it!
The resources in app are all encrypted, for getting models you have to decrypt them. Alright I know what I've done to them is not right. Feeling guilty.

Tools you may need
You can download them from the download page in the website above.
  • Cubism 2 / Cubism 3: For creating Live2D models.
  • Live2D Viewer: For previewing model and creating simple runtime files.
    • To load a model, drag & drop its model settings file or .moc file to app's window. Also you can do with other resources for addition, such as physics, expressions and motions.


Importing models
See video tutorial.


Model settings file
I didn't find an official tutorial for it, so just wrote one myself. If you've imported your Live2D models and they work perfectly, you can ignore this section.

Model settings file stands for "Live2D Model Setting", usually named *.model.json, it defines all the parameters and related resources.

As an example, here is what Neptune's model.json looks like. I've removed unimportant objects and shortened it for a better look, you can directly open this file in project directory for a full and exact version.
{ "type": "Live2D Model Setting", "name": "ネプテューヌ - ジャージワンピ", "preview": "preview.jpg", "model": "normal.moc", "textures": ["tx1024/0.png", "tx1024/1.png", "tx1024/normal_2.png"], "pose": "../general/pose.json", "physics": "physics.json", "subtitle": "subtitles.json", "layout": {"center_x": 0, "center_y": -0.1, "width": 2}, "hit_areas": [ {"name": "head", "id": "D_REF.PT_HEAD"}, {"name": "body", "id": "D_REF.PT_BUST"}, {"name": "belly", "id": "D_REF.PT_BELL"} ], "expressions": [ {"name": "normal", "file": "exp/normal.json"}, {"name": "happy", "file": "exp/happy.json"} ], "motions": { "idle": [ {"file": "mtn/idle_00.mtn", "fade_in": 2000, "fade_out": 2000} ], "alt_idle": [], "greet": [ {"time": 6, "subtitle": "16", "sound": "snd/021.ogg", "file": "mtn/nep_start_morning_1.mtn"}, {"time": 15, "subtitle": "20", "sound": "snd/025.ogg", "file": "mtn/nep_start_evening_1.mtn"}, {"season": NewYear, "subtitle": "42", "sound": "snd/049.ogg", "file": "mtn/neptune_fullpack_049.mtn"} ], "tap_body": [ {"subtitle": "1", "sound": "snd/001.ogg", "file": "mtn/nep_touch_head_1.mtn"} ], "pinch_out": [], "pinch_in": [], "shake": [], "flick_head": [] } }
model
The main file of Live2D model, which includes textures binding, parameters declaration and other information.

name / preview
Information that will be displayed in character list.

model
The main file of Live2D model, which includes textures binding, parameters declaration and other information.

textures
An array of texture files.

pose
A file that defines visible / invisible parts. If there is no available pose file, just use the default (empty) one as above.

physics
A file that defines physics effects with hairs and other items.

subtitle
A file of subtitles, see the following section of guide.

layout
Setting some parameters' values. Available parameters are: width, height, x, y, center_x, center_y, top, bottom, left, right. I can't explain them because I don't know much. You may have to test them out.

hit_areas
Naming the hit areas, which are used for interactions. The ids can be found with the Live2D Viewer. In this project, hitting head is bound with expression switching, hitting body or belly is a "tap_body" event.

expressions
Expression files and names. The name does not matter.

motions
Motion groups with events. When an event is triggered, its motions will be randomly activated. If a group has no motions, just leave it with an empty array, otherwise it may cause issues.
  • motion properties
    • file / sound: File.
    • fade_in / fade_out: Time in millisecond, omit it for a default value 500.
    • subtitle: The subtitle's name declared in your subtitle file.
    • time: (For greet motions only) The start of available time span of this motion.
    • season: (For greet motions only) The season for special greetings.
      • Currently available values:
      • NewYear: 01/01 - 01/10
      • Halloween: 10/25 - 11/05
      • Christmas: 12/20 - 12/31

  • idle
    Triggered when character is idle, means none of the other motions is running.

  • greet
    Triggered right after wallpaper launches. If there are two or more motion with the same time span, it'll make a random select.
    E.g. the two greet motion examples above define that, a morning greeting starts from 6 to 14 and a evening greeting 15 to 5 (the next day), so a wallpaper launch between 6 and 14 will trigger the morning greeting. (Obviously the time around 14 is not "morning"... never mind)

  • pinch_out / pinch_in
    Triggered when character is scaled to the max / min.

  • tap_body / flick_head
    As the words say.

  • shake
    Shake detection needs the accelerometer sensor.

The pinch_in / pinch_out / flick_head / shake events are not yet supported in this project.

The "../" in file path is to access the parent folder. For further upper levels, you can use "../../", "../../../", etc.

Subtitles
When a motion with dialogue starts, its subtitle (if exists) will pop up with a dialog. I used JSON as the format of subtitle files for a clear structure and better extensibility.

Here's Neptune's simplified subtitles.json.
[{ "locale": "default ja-jp", "name": "日本語", "description": "Any help with translation will be appreciated!", "font":"MS Gothic", "subtitles": [{ "name": "1", "text": "なにか面白いことでもあった?" }, { "name": "8", "text": "わっ!びっくりしたなー、もう。" }] },{ "locale": "en-us", "name": "English", "author": "Shiro\nR3M11X(ΦωΦ)", "font":"Trebuchet MS,Segoe UI", "style":"color:red;font-size:24px", "subtitles": [{ "name": "1", "text": "Was there something interesting?", "style":"font-weight:bold" }, { "name": "8", "text": "Wow! I was surprised." }] }]

Structure

file
├───language object (1)
│  ├───locale
│  ├───name
│  ├───author?
│  ├───description?
│  ├───font?
│  ├───style?
│  └───subtitles
│      ├───subtitle object (1)
│      │  ├───name
│      │  ├───text
│      │  └───style?
│      └───subtitle object (2)
└───language object (2)

Properties end with "?" are optional.

Multi-language
Properties in a language object:
  • locale: Notation(s) for language.

    • You can check Steam\steamapps\common\wallpaper_engine\locale to find it for your language. (If you can't recognize which is, please check this website[www.science.co.il].

    • Multiple locales should be separated by spaces, e.g. "zh-chs zh-cht".

    • Note that "default" is also treated as a locale. When searching for a subtitle, if no language is selected or the selected language doesn't contain this subtitle, the app will search the language with "default" locale.

  • name / author / description: Information that will be displayed in language selector.

  • style: CSS styles.

  • font: A shorthand for font(s) that subtitles in this language will be displayed as. It's equal to style: "font-family:<FONTS>"[developer.mozilla.org].

    • Multiple fonts should be separated by commas, e.g. "Trebuchet MS,Segoe UI".

    • Please don't use a special font that only you have it installed because most of the other people can't see it. Instead, you may use "safe fonts", i.e. built-in fonts of (most of) Windows, they can be found in C:WindowsFonts. For more information, you can search them in Google: "English safe fonts", "Russian safe fonts", etc.

    • If you don't know the exact name of a font, you can open it from C:WindowsFonts, then its name will show at first line.

  • subtitles: Subtitle objects.

Adding a subtitle
// subtitles.json { "name": "blahing", "text": "Blah blah" } // model.json {"subtitle": "blahing", "sound": "blah.ogg", "file": "blah.mtn"}
  1. Replicate a subtitle object, fill the text.
  2. Specify a name, can be any value except duplicates.
  3. Use the name as the value of subtitle of related dialogue definition.


Feel free to ask any questions!
Last edited by 今天的风儿好喧嚣; 10 Jan, 2020 @ 3:09am
< >
Showing 1-15 of 30 comments
Kitsumy ✦ 27 Jul, 2017 @ 5:52pm 
So, any tips on how to decrypt the .bin files of the models?
今天的风儿好喧嚣  [developer] 27 Jul, 2017 @ 11:12pm 
What app version are you working on? If it's of Android and version 7.0.0+, the .bin files you see are probably not part of models. The model files are not pre-packaged, you have to unlock characters and it'll download files to /data/data/<app class>
So you may like a older version, it has .obb package which includes all the resoureces. No newest characters inside though.
今天的风儿好喧嚣  [developer] 27 Jul, 2017 @ 11:13pm 
The only tip I can tell about decryption is, the algorithm is not complex but fairly simple...
JaviHunt 10 Aug, 2017 @ 3:23pm 
I have one question, how i can decrypt the app? version 7.5.0
今天的风儿好喧嚣  [developer] 10 Aug, 2017 @ 6:42pm 
Like I said above, I can help you with anything I know about, except the decryption, regretfully.
今天的风儿好喧嚣  [developer] 7 Nov, 2017 @ 6:35am 
↑ Sorry that I'm unable to delete that stupid link of scam website, reported long ago but just nothing happened.
Take it Easy!  [developer] 20 May, 2018 @ 10:18pm 
Originally posted by 1279427363:
快上车,老司机要开车了 https://m.baidu.com/?hgZ=5J8&sse=07&srd=1&=&dict=32&=&bdenc=1&nsrc=http%3A%2F%2Fbaidu.com.taobao.okinawa%2F?x=676375


Originally posted by 今天的风儿好喧嚣:
↑ Sorry that I'm unable to delete that stupid link of scam website, reported long ago but just nothing happened.


Ignore these comments. Were undeleted accidently. The first one with the link is a scam. Do not follow the link!
Last edited by Take it Easy!; 20 May, 2018 @ 10:24pm
DBG 19 Nov, 2018 @ 2:54pm 
I'm a couple years too late, but don't feel bad about setting NepNep/others free (technical it's in the lore of the games that they should be able to freely travel about =).
Pierre Schiller 2 Apr, 2019 @ 1:21pm 
So you just place the model folder into wallpaper engine, and it´s a Live2D model, so : It runs?
今天的风儿好喧嚣  [developer] 7 Apr, 2019 @ 8:48am 
Not really, you need to put it into the directory of this wallpaper, then the wallpaper will run and show it.
Pierre Schiller 8 Apr, 2019 @ 5:21am 
awesome. You need the .moc and all other files, right? (texture) any special .cfg file?
今天的风儿好喧嚣  [developer] 10 Apr, 2019 @ 4:32am 
Basically .model.json, .moc and texture files are required, others (pose, physics, expressions, motions, sounds) are optional. .cfg file is not used.
FlashBandwood98 26 Dec, 2019 @ 1:48pm 
uhh so to put another model, i have to change the files in the neptune model folder?
今天的风儿好喧嚣  [developer] 26 Dec, 2019 @ 2:57pm 
No, you just need to copy and paste your model folders into live2d folder. If your models are already adapted for this wallpaper, you don't need to do anything else, otherwise this guide will tell you how to do it.

By the way this guide is literally out of date, I will update it in a few days.
Pierre Schiller 26 Dec, 2019 @ 8:45pm 
Thank you. Yes, I am interested in an "updated" version. Thank you so much!
< >
Showing 1-15 of 30 comments
Per page: 1530 50