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 ;)

Base concepts

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.

Objects

Root

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 ⚠️ Don't use this. It's not used anymore. It used to be used to find the chibi, but not any longer. Just use the "chibi" key.
"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

Style

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

Head Group

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

Pose

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.

NSFW-able image

Key Type Description
"img" String The path to the image
"nsfw" Boolean Indicates if the image should be hidden outside of nsfw-mode

Character table

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

*⚠️: These poses have typos that were made in DDDG 1. Since the whole point is for DDDG 1 files to keep working, these typos are preserved forever.

⚠️ **GitHub.com Fallback** ⚠️