Specs: V1 - edave64/Doki-Doki-Dialog-Generator GitHub Wiki
This is version 1 of the content pack file. It was used by from DDDG 1.5 onwards. Even though DDDG 2.0 brought with it Version 2 Content Packs, version 1 is still fully supported, and is easier if you are trying to add a very simple character or an extension to one of the main characters (Monika, Sayori, Natsuki, Yuri, regular MC (not the concept one), Chad MC, FeMC, and Amy)
This version could only have one character or an extension to one character, and has some limitations that were lifted in V2. It is however also a lot simpler.
This document describes the index.json of such a pack. For the repo.json, see here.
If you are not familiar with the JSON format, read the JSON Primer first.
If you are not sure whether a index.json is version 1 or version 2, see if it contains "version": 2
in the root object. If it does, it's not version 1 ;)
The words "image" and "sprite" mean the same in this document.
A V1 content pack contains a single character. A character is made up of images of heads and images of the body.
The heads are divided into head groups, which group different head positions, since not all head sprites might fit onto every body sprite. Consider how Monika's head images for when she is looking straight ahead would not fit her body when she is leaning to the side.
The body images are grouped into poses. A pose can either be one static image, a collection of images that can be switched between (Variants), or be split into left and right images that are shown at the same time and can be swapped by the user independently of each other. Every pose belongs to a style. In left-right poses every combination of left and right images should seamlessly fit together. Each of the variation of a pose or the left-right images are called a pose part.
A style is a group of poses, generally by outfit. This grouping is not for preventing incompatibilities, but for convenience. It allows users to play around with poses without accidentally changing the outfit. One styles that all dokis have is "uniform", which is the school uniform. Most also have an outfit "casual".
Any style, pose, pose part, head and head group can be marked as NSFW. In DDDG 1.5, these NSFW worked dynamically. They would appear if the NSFW setting is active and would disappear if it was turned of. It however turned out to be lot of code required to make this work. So in DDDG 2, NSFW settings are now only considered when the pack is first loaded. If the NSFW setting is true, these assets will be included, if the setting is off, they will be excluded, but it won't change dynamically.
The root object of the index.json contains the following key-value-pairs:
Key | Type | Description |
---|---|---|
"$schema" |
String | Should always have the value "https://raw.githubusercontent.com/edave64/doki-doki-dialog-generator-pack-format/master/src/v1/schema.json". This contains a machine readable version of this specification and helps your editor with suggestions and detecting errors |
"packId" |
String | The unique identifier of your pack. It is used internally to distinguish packs from each other. It can look however you want, but it should end with ".[Your username]". E.g., packs that I've made all end with ".edave64". That way packs from different authors should never have the same id. It should only contain letter, numbers dots, minus and underscores. |
"id" |
String | The character id. This identifies a character. This can be anything, but only the lowercase letters, numbers, dots, minus and underscores. To extend an existing character, check the character table. |
"internalId" |
String | |
"folder" |
String | The folder in which the images for this character are located. I suggest setting this to "./" and not to touch it. That will make it so all images are searched for in the same folder as the index.json. If this is set incorrectly DDDG might not find your images. |
"chibi" |
String | The image that is used in the "Add" tool in DDDG to create the character. |
"styles" |
Array of Style objects | The styles of the character |
"heads" |
Head group object or an array of strings | The groups of heads a character has. The key is an arbitrary string that is the name of the head group. If the value is an array, those are paths to the head images (relative to the root folder -property). |
"poses" |
Array of Pose objects | The poses of the character |
Key | Type | Description |
---|---|---|
"name" |
String | The internal name of the style. The poses will use this string to refer to this style |
"label" |
String | Text that will be shown in DDDG when hovering over this style in the style-list |
"nsfw" |
Boolean | Indicates if this style should be hidden outside of nsfw-mode |
Key | Type | Description |
---|---|---|
"all" |
An array of either strings or NSFW-able images | The paths to the head images |
"folder" |
String | The folder that the paths in "all" are inside |
"nsfw" |
Boolean | Indicates if all heads of this group should be hidden outside of nsfw-mode |
Key | Type | Description |
---|---|---|
"name" |
String | |
"style" |
String | |
"compatibleHeads" |
Array of strings | |
"nsfw" |
Boolean | Indicates if the pose should be hidden outside of nsfw-mode |
There are three types of poses, and depending on which one you are working with, they have different properties. One pose cannot combine the properties below. (Technically, DDDG2 will accept mixed poses, since its pose system is more powerful, but it will confuse actual DDDG 1. If you need more layers, just use the V2 format)
Static poses have only one image:
Key | Type | Description |
---|---|---|
"static" |
String | The path to the image. There won't be anything about this pose that can be configured. |
Variant poses have multiple images:
Key | Type | Description |
---|---|---|
"variant" |
An array of either strings or NSFW-able images | The path to the images of this pose. The user will see a "Variant" selector to switch between images. |
Split poses have multiple images for their left and right side. The images will be painted on top of each other by DDDG, with the left image first and the right above it. Technically, they don't actually have to correspond to the left and right side of the character, but since you can't change the name of the selectors in DDDG 1, it would be confusing to use these properties for something else.
Key | Type | Description |
---|---|---|
"left" |
An array of either strings or NSFW-able images | The path to the images of this pose. The user will see a "Left" selector to switch between images. |
"right" |
An array of either strings or NSFW-able images | The path to the images of this pose. The user will see a "Right" selector to switch between images. |
Key | Type | Description |
---|---|---|
"img" |
String | The path to the image |
"nsfw" |
Boolean | Indicates if the image should be hidden outside of nsfw-mode |
Character | id | style id | pose id | head groups |
---|---|---|---|---|
Monika | ddlc.monika | uniform | normal | straight |
leaned | sideways | |||
old | old | - N/A - | ||
glitch | glitch | - N/A - | ||
Sayori | ddlc.sayori | uniform | normal | straight |
sideways | sideways | |||
casual | normal_causal (* |
straight | ||
crossed_arms_casual | sideways | |||
old | old | - N/A - | ||
glitch | glitch | - N/A - | ||
Natsuki | ddlc.natsuki | uniform | normal | straight, sideways, turnedAway |
crossed_arms | straight, sideways, turnedAway | |||
casual | normal_causal (* |
straight, sideways, turnedAway | ||
crossed_arms_casual | straight, sideways, turnedAway | |||
glitch | glitch | - N/A - | ||
Yuri | ddlc.yuri | uniform | normal | straight, sideways |
sideways | straight, sideways | |||
stabbing | - N/A - | |||
glitching | - N/A - | |||
dragon | - N/A - | |||
casual | normal_causal (* |
straight, sideways | ||
hairplay_casual | straight, sideways | |||
MC | ddlc.fan.mc2 | uniform-yellow | normal | straight |
crossed_arms | straight | |||
uniform-red | normal_red | straight_red | ||
crossed_arms_red | straight_red | |||
casual-yellow | casual | straight | ||
crossed_arms_casual | straight | |||
casual-red | casual_red | straight_red | ||
casual_crossed_arms_red | straight_red | |||
MC (Chad) | ddlc.fan.mc_chad | uniform-yellow | normal | straight, straight_closed |
youknowihadto | straight, straight_closed | |||
uniform-red | normal_red | straight_red, straight_closed | ||
youknowihadto_red | straight_red, straight_closed | |||
casual-yellow | normal_casual | straight, straight_closed | ||
youknowihadto_casual | straight, straight_closed | |||
casual-red | normal_casual_red | straight_red, straight_closed | ||
youknowihadto_casual_red | straight_red, straight_closed | |||
FeMC | ddlc.fan.femc | uniform-sh-yellow | normal | straight |
crossed_arms | straight | |||
uniform-lh-yellow | normal_long_hair | straight_lh | ||
crossed_arms_long_hair | straight_lh | |||
uniform-sh-hetero | normal_hetero | straight_hetero | ||
crossed_arms_hetero | straight_hetero | |||
uniform-lh-hetero | normal_long_hair_hetero | straight_hetero_lh | ||
crossed_arms_long_hair_hetero | straight_hetero_lh | |||
uniform_strict-sh-yellow | uniform_normal | straight | ||
uniform_crossed_arms | straight | |||
uniform_strict-lh-yellow | uniform_normal_long_hair | straight_lh | ||
uniform_crossed_arms_long_hair | straight_lh | |||
uniform_strict-sh-hetero | uniform_normal_hetero | straight_hetero | ||
uniform_crossed_arms_hetero | straight_hetero | |||
uniform_strict-lh-hetero | uniform_normal_long_hair_hetero | straight_hetero_lh | ||
uniform_crossed_arms_long_hair_hetero | straight_hetero_lh | |||
casual-sh-yellow | casual_normal | straight | ||
casual_crossed_arms | straight | |||
casual-lh-yellow | casual_normal_long_hair | straight_lh | ||
casual_crossed_arms_long_hair | straight_lh | |||
casual-sh-hetero | casual_normal_hetero | straight_hetero | ||
casual_crossed_arms_hetero | straight_hetero | |||
casual-lh-hetero | casual_normal_long_hair_hetero | straight_hetero_lh | ||
casual_crossed_arms_long_hair_hetero | straight_hetero_lh | |||
Amy | ddlc.fan.amy2 | uniform | normal | straight, straight_broken_glases |
folded_hands_up | straight, straight_broken_glases | |||
folded_hands_down | straight, straight_broken_glases | |||
hands_on_glasses | straight | |||
casual | normal-casual | straight, straight_broken_glases | ||
folded_hands_up-casual | straight, straight_broken_glases | |||
folded_hands_down-casual | straight, straight_broken_glases | |||
hands_on_glasses-casual | straight |
*