0% found this document useful (0 votes)
2K views38 pages

DDLC Scripting Guide

This document provides a summary of character posing, expressions, backgrounds, and audio files that can be used for scripting a DDLC mod. It includes tables of options for character poses and expressions, lists of background images, and descriptions of music tracks and sound effects. The document is intended as a quick reference guide for modders to look up assets while scripting a new mod project.

Uploaded by

Latte Coffee
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2K views38 pages

DDLC Scripting Guide

This document provides a summary of character posing, expressions, backgrounds, and audio files that can be used for scripting a DDLC mod. It includes tables of options for character poses and expressions, lists of background images, and descriptions of music tracks and sound effects. The document is intended as a quick reference guide for modders to look up assets while scripting a new mod project.

Uploaded by

Latte Coffee
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

Beginning Notes:

If you have any specific questions not listed here or suggestions/comments for the scripting guide, you can DM me on reddit at
/u/MrEpicIsHere777. This guide was created with notes and help from many people of the modding community, it is a collective effort
that I assembled into a document.

Before you read this, I highly recommend reading this guide to getting started with a DDLC mod. This document you are reading now
is more intended to be a "cheat sheet" while you script.
Read it here:
[Link]

I also highly recommend using the Ren'Py doc to guide you along your scripting as well.
Read it here:
[Link]

If I write something along the lines of "<character>" anywhere I put them, do not include <> in your script. It's for guide purposes only.

With that said, enjoy the doc.

~ MrEpic
Character Posing + Position:

Body Pose (add b for Sayori Natsuki Yuri Monika


casual outfit)

1 Default Default Default Default

2 Right Arm Raised Right Hand on Hip Right Hand Up Hand on Hip

3 Left Arm Raised Left Hand on Hip Both Hands Up Pointing

4 Both Arms Raised Both Hands on Hip Looking Away Pointing w/ Hand on Hip

5 Tapping Fingers Crossing Arms Leaning Forward

Positions Effect

11 t (default)

21 22 l (slide in from left)

31 32 33 s (sink)

41 42 43 44 h (hop)

f (focus)

i (instant
hide
appearance)
(Technically not a position, but when used with t or l and zorder 1, will fade the
character out. Make sure to use "hide <character>" in the next line after.)
d (dip)

hf (hop + focus)
Expressions:

Expression Sayori Natsuki Yuri Monika

b
c

e
f

h
i

k
l

n
o

q
r

t
u

w
x

z
Sayori Special Pose Expressions (Only ones able to be used for this pose)

a b c d

Monika Special Pose Expressions (Only ones able to be used for this pose)

a b
Yuri Yandere Expressions (used as y<number>)

1 2 3 4 5 6 7

Yuri Turned Away Expressions Natsuki Special Expressions (Not compatible with pose 5, used
as <pose>2<"b" if casual><expression letter>)

a a

b b
c c

d d

e e
f

h
i

These are not used like the above and are instead used as
natsuki scream and natsuki vomit respectively.

scream

vomit
Backgrounds:

Backgrounds

Names Images

residential_day
class_day

corridor
club_day

club_day2 (⅕ chance to show,


otherwise club_day will appear. If
need be, you can change this to
always appear in [Link] by
removing the “choice:”s)
closet

bedroom
sayori_bedroom

house
kitchen

notebook
notebook-glitch
Audio:

Audio

Sound Effects (Note: Only the first four are defined in


Music [Link]. If you want to play any other sound, use this
format: play sound "sfx/<sfx name>.ogg"

t1 Title Theme closet_open Opening Door

t2 Ohayou Sayori! closet_close Shutting Door

Ohayou Sayori! (Wobbly 4


t2g page_turn Page Turn
Second Section)

Ohayou Sayori! (Rapid Glitch


t2g2 fall It's... a fall sound effect
Noise)

Ohayou Sayori! (Gradual Pitch


t2g3 s_kill_glitch1 Glitching Sound
Increase)

t3 Main Theme fall2 A much rougher falling SFX

t3g Main Theme (Off Key Notes) giggle An evil giggle.

Main Theme (Start From Weird Really weird descending


t3g2 glitch1
Note) glitching sound

Main Theme (Reverb +


Another weird sounding
t3g3 Strange Wet Noises [Before glitch2
descending glitch
Yuri Cutting])

t3m Main Theme glitch3 A jumping glitch

t4 Dreams of Love and Literature gnid Kinda sounds like when your
ear is ringing. It's a pretty
spooky buildup.

t4g Static + Error Noise interference Triangleish Wave Error

The SFX playing when you


t5 Okay, Everyone! monikapound
delete Monika in Act 3

t5b Okay, Everyone! mscare Monika's jumpscare

Okay, Everyone! (See Misc


Natsuki neck snapped run (at
t5c Notes for why Okay, Everyone run
you).
has three separate defintions)

t6 Play With Me slap Slap!

Play With Me (Bitcrushed


t6g smack More like a bump, but smack!
Melody Piano)

Play With Me (Sped-up +


t6r stab Three slow, consecutive stabs
Reversed)

The little music that plays


t6s Play With Me (Yuri Death) yuri_kill when Yuri kills herself,
featuring stab noises

t7 Poem Panic! crack Natsuki neck snap

Poem Panic! (First Melody


t7a eyes Super low pitched breathing(?)
Loop)

t7g Poem Panic (Act 2 Argument)

t8 Daijbou!
t9 My Feelings

My Feelings (Harpsichord +
t9g
Fast)

t10 My Confession

t10y My Confession (Yuri)

Sayo-nara (Note; includes


td
stinger)

m1 Just Monika.

mend I Still Love You

Ghost Menu Theme (Static +


ghostmenu
Weird Breathing)

Low Sawtooth Wave (Sounds


g1
like an error)

Lower Sawtooth Wave (Also


g2 sounds like an error, but
worse)

hb Heartbeat

Monika's credits [Link]


[Link] this with: play music
"bgm/[Link]"

Your Reality. Call this with:


[Link]
play music "bgm/[Link]"
Static that plays when you
delete [Link] early. Call
s_kill_early.ogg
this with: play music
"bgm/s_kill_early.ogg"
Glitching:

There are a lot of glitch functions in DDLC. I mean, that is the core of the game. So, let's start out with the most notable ones:

To use the black outlined glitch font, do the following:

$ style.say_dialogue = [Link] #Glitch Font Starts

"<normal dialogue would go here>"

$ style.say_dialogue = [Link] #Glitch Font Ends

To use the long string of glitch characters, do the following:

$ gtext = glitchtext(<number of glitch characters you want>) #Any variable works here, the game just uses gtext
"<normal dialogue>[gtext]" #gtext is when the glitch text starts

For tearing up the screen (ex: like in Sayori's death or any glitch ever), use the following:

show screen tear(20, 0.1, 0.1, 0, 40)


play sound "sfx/s_kill_glitch1.ogg" #You can change this sound if you want
pause <however long you want the glitch effect to last, generally around 0.25>
hide screen tear

These parameters can actually be changed.

# show screen tear(number, offtimeMult, ontimeMult, offsetMin, offsetMax)


# "number" tells how many times the screen is divided. This makes the sections that glitch larger or smaller.
# A number is chosen between offtimeMult and ontimeMult to offset each section
# offsetMin and offsetMax tell how far the glitch will distort the screen. Setting the Max higher makes each
section move farther out
For darkening the corners of the screen (Vignette), use the following:

show vignette: #Add zorder 3 or higher to be above the characters


alpha <value of transparency (1.0 for solid, 0.0 for completely transparent>

#You can also use "at vignettefade(start time after value in seconds)" to gradually fade in the effect over 25
seconds.
#"at vignetteflicker(start time after value in seconds)" will flicker the effect.
#The start times can be changed in [Link]

hide vignette #End the effect

For the noise effect:

show noise: #Add zorder 3 or higher to be above the characters


alpha <value of transparency (1.0 for solid, 0.0 for completely transparent>

#You can also use "at noisefade(start time after value in seconds)" to gradually fade in the effect over 5 seconds.
#The start times can be changed in [Link]

hide noise #End the effect

For the zooming in w/ the heartbeat music, use this:

show layer master at heartbeat #Start

#Code

show layer master #End


Poems:

I should've added this much earlier but... woops. Creating and calling poems is actually relatively easy. I suggest first and foremost
you make your own poems_mod.rpy or something to put your poems into, but you can also add on to the original [Link] from the
base game if you'd like.

Now, to make poems... first, let's write one.

poem_m_as1 = Poem(
author = "monika",
title = "Conscious",
text = """\
I thought.
Thought.
Thought.\n
Struggled deeply.
The year was hard.\n
Friends.
Family.\n
Empty.\n
Silhouettes roaming the halls.
A blur.\n
And then.
Enter You.\n
Time passes.\n
And I,
the Epiphany.\n
My tears are stained red."""

A wonderful poem, right? (please don't use it for anything) But that's not to be discussed here. Let's break down what we just did
here.

First, we defined what variable our poem is stored in. So, in this example, it would be poem_m_as1. You can name this whatever you
want, but I suggest giving it the suffix poem_ at least.
Next, we determine the author. The author determines what font the poem will be using, except for Yuri's Act 2 fonts (we will get into
those in a moment). This is simply what girl you want's name in all lowercase.

If you have a new character, you can first add a new font at the bottom of your script like so:

style <character>_text:
font "<location of your font>"
size <size of text>
color "#000"
outlines []

Next, you'll need to update a section of the original [Link]:

if [Link] == "yuri":
if currentpoem.yuri_2:
text "[[Link]]\n\n[[Link]]" style "yuri_text"
elif currentpoem.yuri_3:
text "[[Link]]\n\n[[Link]]" style "yuri_text_3"
else:
text "[[Link]]\n\n[[Link]]" style "yuri_text"
elif [Link] == "sayori":
text "[[Link]]\n\n[[Link]]" style "sayori_text"
elif [Link] == "natsuki":
text "[[Link]]\n\n[[Link]]" style "natsuki_text"
elif [Link] == "monika":
text "[[Link]]\n\n[[Link]]" style "monika_text"

#Add this.

elif [Link] == "<character>":


text "[[Link]]\n\n[[Link]]" style "<character>_text"

And that should do it. Do keep in mind that you'll need an "Okay, Everyone!" variation for that character that you will likely have to call
specifically with the showpoem function, unless you add a 5_<character>.ogg file in audio/bgm.
Now, for actually calling a poem. There are a number of things you can do here, but the base function is:

call showpoem (<poem variable>)

This will just show the poem as normal. The "Okay, Everyone!" variation will play and yada yada. But, there are actually a lot more
variables you can mess with.

call showpoem(poem, music, track, revert_music, img, where, paper)

# Poem = Poem being shown


# Music = If True, it will change the music to either the Track variable or the "Okay, Everyone!" variation
# Track = The song you want to play instead of "Okay, Everyone!"
# Revert_music = Set to true if you want the variation of "Okay, Everyone!" to change back to the normal version
after you close the poem.
# Img = If you want to show an image (or character) in the background while the poem is on screen. Good for scares.
# Where = What position you want the image shown
# Paper = If you want a special image for the poem paper to be shown, like Yuri's piss paper

So, if I wanted to call Yuri's piss paper poem, I'd do...

call showpoem (poem_y23, track="bgm/5_yuri2.ogg", revert_music=False, paper="images/bg/poem_y2.jpg", img="yuri


eyes", where=truecenter)

Not too hard, right?


Special Poems:

This is actually really easy to do, but I feel the need to give it its own section anyways because it's pretty important.

All the special poems are simply defined in poems_special.rpy, I'd suggest adding onto that or making a duplicate
poems_special_mod.rpy.

This is the basic label for a special poem:

image poem_special<number> = "<location of poem>"

label poem_special_<number>:
$ quick_menu = False
play sound page_turn
show poem_special<number> with Dissolve(1.0)
$ pause()
$ quick_menu = True

There's nothing really else to say about this, other than you can really do whatever the hell you want with this. $ pause() pauses until
you click, so if you want another image shown or a sound effect played or whatever, just put it after or before those.
Misc Notes:

If a character combination isn't in [Link], use this function to add it:

image <character> <pose><expression> = [Link]((960, 960), (0, 0), "<expression location>" (0, 0), "<pose
location>")

You can really name the variable whatever you want, but following how the others are set up makes life easier in the long run. I
recommend adding it with the other expressions in [Link].

Natsuki’s special expressions do not work with her special pose normally, you’ll have to edit a new one.

(THIS EXPRESSION HAS BEEN REMOVED FROM THE FILES AS OF DDLC 1.1.1, YOU WILL NEED TO ADD IT AS A CUSTOM
ASSET)

She has an unused expression in her “old2” folder in [Link] named “[Link]”:

Isn’t it cute? You can implement it using the same image function above. Bear in mind it’s specific to her special pose.
To show a character, use this function:

show [character name] [character pose and expression] zorder [character priority] at [effect][position]

To hide a character, use zorder 1. Else, you can have zorder set to whatever you want above 2. Having one character above another
will let you make them appear in front of the other (ex: the scene in DDLC where Sayori stole a bite of Natsuki's cookie.)

Formatting Tricks:

You can find a full list of the formatting tricks Ren'Py uses here: [Link]

But for some ones that might be more useful for a DDLC mod...

{nw} - Used in dialogue. This will skip to the next line without player input.
{i}dialogue{/i} - Italics
{fast} - Jumps to that point in the text immediately.
{cps=value}dialogue{/cps} - Changes the characters shown per second. You'll likely want something like {cps=*2} to double the
speed.
{w=value} - Pauses and waits for a value of seconds before continue on the dialogue.

Basic transition for starting/ending a scene:

There are multiple transitions that can be used that I have yet to document, so take this as a basic guide. For beginning a chapter:

stop music fadeout 2.0


scene bg <background you want to use>
with dissolve_scene_full
play music <music you want>
Transition to a new scene:

stop music fadeout 2.0


scene bg <bg you want>
with wipeleft_scene
play music <music you want>

And ending a chapter:

scene black
with dissolve_scene_full
return

The Mystery of "Okay, Everyone!" and how it plays the variations:

So, I don't entirely understand this yet, but from what I can gather...
The poem music is controlled directly in [Link] at the very bottom of the script:

label showpoem(poem=None, music=True, track=None, revert_music=True, img=None, where=i11, paper=None):


if poem == None:
return
play sound page_turn
if music:
$ currentpos = get_pos()
if track:
$ audio.t5b = "<from " + str(currentpos) + " loop 4.444>" + track
else:
$ audio.t5b = "<from " + str(currentpos) + " loop 4.444>bgm/5_" + [Link] + ".ogg"
stop music fadeout 2.0
$ [Link](audio.t5b, channel="music_poem", fadein=2.0, tight=True)
A label is set up as showpoem. This is really for, well, showing the poem that MC is seeing. It checks the track, music, if it should
reverse the music, image, where it should show at, the type of paper, blah blah. What's important is a little lower, at "if music".

What this does is first, get the current position of the song playing. It then checks what song is playing. If it's the one defined as
"track" in showpoem, it'll change "t5b" to play from the current position of the song, loop at the normal spot, and the track defined as
"track". Else, it'll do the same thing, but play the "Okay, Everyone!" of whose poem you're looking at. So, if I were viewing Natsuki's
poem, it'd play her variation of "Okay, Everyone!"

if music and revert_music:


$ currentpos = get_pos(channel="music_poem")
$ audio.t5c = "<from " + str(currentpos) + " loop 4.444>bgm/[Link]"
stop music_poem fadeout 2.0
$ [Link](audio.t5c, fadein=2.0)
return

If revert_music is true, after the poem is closed, it'll go back to the normal "Okay, Everyone!" at the current position, defined as 5c.

The variations are not defined by default. You can add them in just like any other music in [Link], like so:

define [Link] = "<loop 4.444>bgm/5_monika.ogg"


define [Link] = "<loop 4.444>bgm/5_sayori.ogg"
define [Link] = "<loop 4.444>bgm/5_natsuki.ogg"
define [Link] = "<loop 4.444>bgm/5_yuri.ogg"

You would then use tmonika and etc. as normal

You might also like