Heyoo.
This project is an interactive console for Ren'py. Way more sophisticated than the original one in DDLC.
This version is far from done yet. So use it if you don't fear uncommented code.
I'll use it for a mod which will teach you Git, the version control system.
I'd recommend using https://www.renpy.org/doc/html/translation.html for this.
There are a couple jokes I coded that I can think of that involve the menu/UI that probably won't translate properly, though.
I like using wipeleft (without adding '_scene') for transitions because it feels more natural. The new background just rolls over the old one. Naturally you can also do wiperight, wipeup, and wipedown.
Here are the transitions listed in the renpy documentation.
This is probably a very amateur-y way to do it, but it can be done like this:
https://www.renpy.org/wiki/renpy/doc/tutorials/Remembering_User_Choices
basically it would be:
$ [variable1] = True $ [variable2] = True label [label name] menu: "[Menu Option #1]" if [variable1] == True: [Whatever this option does] $ [variable1] = False jump [label name] "[Menu Option #2]" if [variable2] == True: [Whatever this option does] $ [variable2] = False jump [label name]
This basically tells the game to jump back to the menu, but with one of the menu options unavailable. Downside of this is, unlike the original game, "Who should I show this poem to first?" and "Who should I show this poem to next?" aren't differentiated. You could try looking at the code of the game, though.
You can test your mod directly inside Ren'Py (in the launcher, click "Launch Project").
While you're there, you might also want to enable developer mode. In definitions.rpy I believe, look for the line that says "config.developer = False". Set this to True. This enables Developer Mode. Don't forget to disable it before packaging your project for distribution.
Here's the raw code:
transform faint(x=640, z=0.80): xcenter x yoffset 0 xanchor 0.5 yanchor 0.5 ypos 0.50 zoom z*1.00 alpha 1.00 rotate_pad True subpixel True easeout 0.8 ypos 1.5 rotate -70
and then to actually show it:
show yuri faint zorder 2 at faint
the "at faint" is the part that actually makes them fall.
If you want to learn more I'd suggest taking a look at the documentation for transforms
Hope this helps, I'd be happy to help more if you have any questions
You can see the default ones for RenPy here.
The custom ones used in DDLC are in the transforms.rpy file. You can use them as a template for making some of your own as well. As an example, heres one that will make somebody run around the screen then randomly run off in some direction after 10 loops (this was made for a chibi to run around, so would look off for a full size sprite):
transform run_around: anchor(0.5, 0.5) around(0.5, 0.5) angle 90 radius 0.3 linear 1.5 angle 360 linear 0.5 angle 450 repeat time 10 choice: # choice randomly picks one of the choices linear 0.5 xalign 0.8 yalign 0.5 choice: linear 0.5 xalign 0.2 yalign 0.5 choice: linear 0.5 xalign 0.5 yalign 0.2
Hi! I helped write this tool.
If you're wanting to upgrade an existing project, all you really need is the mod_assets folder. This contains all the code and images that make the tool work. We distributed this initially as an example mod so that people could try it out without having to have a project already started.
Also note that you must upgrade to renpy 7.3.5 for any of this to work at all.
To address each of your questions individually:
Does this need a definition for each pose? If it is, how to add the MPT definition?
How to use them in my script?
show yuri turned
for example will get you started with some defaults.Why do you need to refresh the sprite?
How do you use the refresh function and where do I put it in my script?
Is the MPT already work out of the box without definition so that I can immediately use it on my script?
How to use the sprite sheet? Like the “cm,” “om,” “ce,” “oe,” and “brow”, etc.
To close, yes - this is complex. Layeredimage itself is pretty complex, and this certainly isn't all you can do with it. Take this a little bit at a time, play with it, and understand what it's doing before you jump immediately into upgrading your project to use it.
You should read the "Getting Started" link in the sidebar.
The renpy quickstart guide is helpful too, although it assumes you're starting a brand new project. You'll want to start with the template instead.
This isn't too hard to do. You would probably want to define a new sound channel for it.
This article is a little older but should still apply here:
https://www.renpy.org/wiki/renpy/doc/cookbook/Adding_a_Sound_Channel
In your case you might want your ambient noise channel to be a music channel and not a sfx channel like the example has. Up to you.
If you want to get started out, I suggest checking out u/Tormuse's Modding Tutorial. After that you should check out the Ren'Py Documentation for more specific answers to any questions you may have.
Some extra reading that might help clarify: https://www.renpy.org/doc/html/displaying_images.html#image
When you do this:
image bg future = "future.png"
The image's name is bg future. There's nothing really inherently special about calling it a bg. This would work too:
image future = "future.png" scene future with dissolve_scene_full
Notably this doesn't work:
scene "future.png"
You'd do that this way:
scene expression "future.png"
According to the Ren'Py documentation, "mouseup_3" refers to the right mouse button. I haven't used a Mac in a while, so I don't remember if the mice have right mouse buttons by default, but maybe that's where the conflict is. I'm just shooting in the dark here, though. :/
Here's the link if you're interested: https://www.renpy.org/doc/html/keymap.html
I hope it works out for you. ^_^
Depends on what specifically you want to change.
The style for the dialogue text is in gui.rpy. The poem fonts I believe are in screens.
As far as changing it:
https://www.renpy.org/doc/html/text.html#fonts
Renpy supports some fonts natively, but if it doesn't gave the one you want all you need to do is drop a .ttf file in the game folder.
You can change the Logo in the splash.rpy. The code looks like this:
image menu_logo: "/mod_assets/AQMLogo.png" subpixel True xcenter 240 ycenter 120 zoom 0.60 menu_logo_move
Just drop your icon in your game folder and write the path to it, like above.
If you're using the template, the easiest way to mimic the act 1 to act 2 transition do this would be to add these two lines at the end of the chapter:
$ persistent.playthrough = 1 $ renpy.utter_restart()
When persistent.play through = 1, it replaces Sayori's sprite with the glitched one, provides the glitched main menu text, and tells the game to ignore the save files. If you wanna disable any of these specifically, I can direct you to those places in the code, but its always best to keep playing around and find things yourself.
To make a menu choice affect something down the line, you just need to set a variable. This isn't actually good code, but it'd look like:
menu "Do you want pizza or ice cream?": Pizza: $ food = 'pizza' Ice Cream: $ food = 'ice cream'.
Then later on, you could say:
if food == 'pizza': mc "I have terrible heart burn" if food == 'ice cream': mc "Shouldn't have had dairy..."
https://www.renpy.org/doc/html/quickstart.html
Here is a good guide for a lot of this as it pertains to ren'py in general.
From the DDLC Modding Discord:
>Important info for anyone wanting to distribute their mod as .rpyc files! The current version of DDLC is not compatible with .rpyc files generated by the latest update of the Renpy SDK. Please download the older release or distribute .rpy files instead. https://www.renpy.org/release/6.99.12
This post has been removed as the project violates Four Leaf Studio's guidelines on fanworks as can be seen both in the details of 4LS's Creative Commons license: https://creativecommons.org/licenses/by-nc-nd/3.0/ and their direct Q&A here: https://ks.renai.us/viewtopic.php?t=4717
Specifically: NoDerivatives - If you remix, transform, or build upon the material, you may not distribute the modified material.
You may not alter the game, nor make your own derivative work that builds on it. Specifically, we have a dislike for reverse engineering the game to extract the music, art or scripts, which is in breach of this license.
Do not rip and use any assets directly from KS. That means text, images, music etc. that we've made. Make your fanwork from the ground up.
We generally frown on fan visual novels due to how easily they are misunderstood as sequels or spinoffs.
We know you are aware of this as you say so in the disclaimer at the beginning. The game developers' guidelines are rules, not something you can simply choose not to follow, and r/DDLCMods does not endorse fanworks that knowingly infringe on the intellectual property of other game developers.
This post has been removed as the project violates Four Leaf Studio's guidelines on fanworks as can be seen both in the details of 4LS's Creative Commons license: https://creativecommons.org/licenses/by-nc-nd/3.0/ and their direct Q&A here: https://ks.renai.us/viewtopic.php?t=4717
Specifically: NoDerivatives - If you remix, transform, or build upon the material, you may not distribute the modified material.
You may not alter the game, nor make your own derivative work that builds on it. Specifically, we have a dislike for reverse engineering the game to extract the music, art or scripts, which is in breach of this license.
Do not rip and use any assets directly from KS. That means text, images, music etc. that we've made. Make your fanwork from the ground up.
We generally frown on fan visual novels due to how easily they are misunderstood as sequels or spinoffs.
We know you are aware of this as you say so in the disclaimer at the beginning. The game developers' guidelines are rules, not something you can simply choose not to follow, and r/DDLCMods does not endorse fanworks that knowingly infringe on the intellectual property of other game developers.
as in it's just a loading wheel for a sec?
yeah... that's an issue on some computers for mods on a newer version of renpy.
The only fix I currently know of is downloading renpy and just running it through that (just download/install and change the file directory once you boot it up).
I assume you're talking about what software to use for making the script and commands for a mod?
If so, I suggest using the one I am currently using as well called Visual Studio Code. Link here: https://www.google.com/url?sa=t&source=web&rct=j&url=https://code.visualstudio.com/download&ved=2ahUKEwiq6vz8zM3nAhXLsJ4KHcfqBn4QFjAAegQIChAB&usg=AOvVaw11fc5fOXYIyxQh75jYLjXg (I was too lazy to make the link shorter.)
If you're not talking about that type of software please clarify.
I'm sorry, but I'm really not sure. I just tested altering the "style" section, like I mentioned, and it didn't like the "yzoom" command being used as part of the "style" command. I see lines for defining the way the text is displayed, including position and size, but I don't know how to change the orientation. I'm sure there's a way to do it, and I'm pretty sure it lies in the style section of screens.rpy, but I don't know what command to use.
Maybe if you check in the #mod_help section of the DDMC Discord or maybe even the Ren'Py Discord, someone else will be able to help. My coding knowledge is relatively limited.
Erm... I'm not sure why you're posting this here, but I'm removing it, since it has nothing to do with modding DDLC.
If you want Ren'Py help, you'd probably be better off joining the Ren'Py Discord.
If you mean changing your name on Discord to display your mod name, you can do that yourself by right-clicking your name and clicking "Change nickname," or if you mean you want to change the colour of your name to reflect what stage of development you are, any moderator on the Discord can do that for you; just DM them there. As for the new mod, you can fill out a submission form for it and indicate that it's in the planning stages to have it added to the above list as well as the Discord list.
Good day!
Step (1) Download DDLC from http://ddlc.moe/
Step (2) Download the latest MBS file from https://tinyurl.com/mbs-v1-2-fix
Step (3) Unzip the MBS file
Step (4) Find your DDLC folder and paste contents of the Unzipped MBS File
Step (5) A message box saying "Overwrite Scripts" should show
Step (6) Click Yes
:)
Hope this helps!
It's in the pinned comment just below the picture.
But here you go.
Premise
: What if YOU were President of the Literature Club?
Mod Description
: "A Small Engine that re-installs the DDLC Universe!"
"After one year in development, with over 11 possible endings, 17 original tracks, and 4 routes that culminate in the ever-elusive festival... the Monika Before Story Engine re-installs the game manifest to give you that reminiscent feel as DDLC approaches its 1 year Anniversary."
Download link
: https://tinyurl.com/mbs-v1-fix (updated to v1.1)
Nexus Page
: https://www.nexusmods.com/dokidokiliteratureclub/mods/3/?tab=articles
It's in the pinned comment just below the picture.
But here you go.
Premise
: What if YOU were President of the Literature Club?
Mod Description
: "A Small Engine that re-installs the DDLC Universe!"
"After one year in development, with over 11 possible endings, 17 original tracks, and 4 routes that culminate in the ever-elusive festival... the Monika Before Story Engine re-installs the game manifest to give you that reminiscent feel as DDLC approaches its 1 year Anniversary."
Download link
: https://tinyurl.com/mbs-v1-fix (updated to v1.1)
Nexus Page
: https://www.nexusmods.com/dokidokiliteratureclub/mods/3/?tab=articles
You are using the old version because that error was specifically addressed in the patch notes which I have copy-pasted below. :)
The latest link has the fixed version, I'll be happy to upload the decompiled one if it still has errors.
Patch Notes
Version 1.1 (September 4, 2018) - https://tinyurl.com/mbs-v1-fix
>Changed "Install Instructions.txt" to "Readme.txt"
>Updated "scripts.rpa" to fix missing ScriptError: could not find label 'ch3_start_natsuki_new'
Version 1.0 (September 2, 2018) - https://tinyurl.com/mbs-v1
You can also play with the box wrapping if that's what you're trying to work around.
https://www.renpy.org/doc/html/style_properties.html#style-property-box_wrap
box_wrap False will just turn off the wrapping altogether, and there's some other parameters that let you tweak the behavior.
Very cool that you're offering this, but I think it's unlikely that anyone is going to read a comment this far down on the Megathread. I suggest you make your own post about it. You might also like to check out the DDMC Discord if you haven't already.
Yay! I'm glad to see this list back! :D I think a good next step would be to copy the links of the mods from the DDMC Discord server, and then after that, take submissions from here in the comments.
I'll submit my own Full Release here: True Literature Club (TLC) https://tinyurl.com/ycx23hrq
I also have one in the Planning stage called Doki Doki Storm.
I also just don't know how to use rpatool... lol. I'm not experienced at all with this type of coding. I'm only 13 and I've only ever tried coding at all on Scratch.mit.edu (and I'm very good at it on that website but it doesn't help too much here).
It’s quite easy to create one if you know where to look. The size of mod teams can vary from around three to 20 or more, from personal experience. A good mod can be made by a single person, yes. The typical time for a full fledged mod can take around three months or more unless your doing a time limit challenge. Everything you listed for role requirements are what you practically need. Backgrounds sprites and poses can be found in the DDMC community google drive, the difficulty for implementing custom things like censoring and a phone are not difficult if you know where to look (https://www.renpy.org/doc/html/) and finally, don’t use directly copyrighted assets. Music covers are allowed for mods, but have to be unique.
Are you talking about menu choices? If you are, then look at this page:
In-Game Menus — Ren'Py Documentation
It teaches you how to use them.
.rpy - plaintext file that is human readable code.
.rpyc - compiled bytecode; this is what renpy actually reads.
.rpa - a renpy archive that can hold various different files.
The renpy SDK will automatically compile your .rpys to .rpyc when you run your game through it.
Building RPA files through renpy requires you to set certain build options to tell it what you want archived where. The help docs are pretty decent in setting this up.
> Renpy can use movie files as displayables, so you could use one as a background. > > https://www.renpy.org/doc/html/movie.html > > Renpy doesn't and likely won't ever support .gif.
Even better! thank you so much!
You should probably get permission from whoever's mod you're translating, if you haven't already.
Renpy has built in support for translations, here's all the docs on it
https://www.renpy.org/doc/html/translation.html
I believe doing it this way you could do a translation as a "patch" (there's a whole section on there for "unsanctioned translations) rather than decompiling and recompiling the game.
Most people just host files on Google Drive or Dropbox or whatever. Any file sharing site works pretty much
According to the renpy docs the save data is pickled:
https://www.renpy.org/doc/html/save_load_rollback.html#what-ren-py-can-save
So you may be able to use various methods of cPickle to unpickle it, if you want to see what the raw data looks like.
>My main intention is to figure out a way to rewind my choices or go back through the storyline.
You'd probably spend way less time just holding down the skip button. DDLC is not that long.
I have a little question. Is there a way to flip a character when showing it? I am using a custom character (MC/Player) that looks diagonally to the left of the screen, but when other characters are at the right of the screen, this doesn't look quite right. (no pun intended)
I saw that there is a way to define a flipped image, but is it necessary that i define all the combinations flipped?
Thank you in advance.
You can kickstart with this thread: https://www.reddit.com/r/DDLCMods/comments/9cawwv/so_you_wanna_get_started_modding_ddlc/
Also the renpy website, the website for the coding language, helps you get deeper into it:
I get notifications every time someone comments on my guide. Also, you can check out the #mod_help section of the DDMC Discord. Also, in a pinch, if for some reason, you can't reach anybody, you might be able to find help in the Ren'Py manual.
I notice that you're using Ren'Py version 7.3.5.606. That's been known to cause problems with DDLC, which was made with an earlier version. I suggest you uninstall it and install Ren'Py version 6.99.12
Renpy can generate RPAs itself; you don't need an external utility just to make archives.
Take a look at https://www.renpy.org/doc/html/build.html#archives
The base game's options.rpy (NOT the ones from the various templates) is helpful here also to see how the original four .rpa files are made.
My guess is that this is a choice menu in the screenshot. You could try changing the value of gui.choice_button_text_idle_color
. It's probably located in gui.rpy file. If you only have .rpyc files, there are tools which can decompile them back to .rpy available online.
If this doesn't help, styles might be involved. See Ren'Py documentation for information about them (this page specifically).
The buttons are part of the navigation screen. The first statement in the screen is a vbox:
init -501 screen navigation(): vbox: style_prefix "navigation" xpos gui.navigation_xpos yalign 0.8 spacing gui.navigation_spacing #etc.
Making the buttons horizontally across the bottom would just involve changing vbox to hbox, and playing with the values of xpos, yalign, and spacing to line them up properly.
For more information you can refer to the renpy docs on screens https://www.renpy.org/doc/html/screens.html
It looks like you're using the wrong version of Ren'Py. DDLC was made using Ren'Py version 6.99.12 and I've found that unpredictable things happen if you try to use the latest version. I'm told that it's possible to use the latest version, but you have to really know what you're doing, so my advice would be to uninstall that and install the earlier version and try building it with that.
It just needs to be hidden in an archive to produce the same effect. You can either use an external utility like rpatool to edit archives, or renpy can do it for you if you want to mess around with builds.
There's a "getting started" guide in the sidebar.
The Renpy quickstart article is a pretty good starting point as well on getting the software itself set up. Some of it isn't applicable to modding DDLC (you won't want to start a new project, for example) but all of the fundamentals it talks about are.
I notice from the bottom of the error message that you're using Ren'Py version 7.2.2.491. You're going to want to uninstall that and put in Ren'Py version 6.99.12, because that's the version that DDLC uses and in my experience, using later versions of Ren'Py makes strange, unpredictable things happen to DDLC. (Including crashing like this)
The interesting thing is that your folder name is "renpy-6.99.12.4-sdk" so I'm guessing that you originally installed the correct version and then updated it to the incorrect version. I recommend against updating it this time.
After that, try again, and if you still get this error message, the key line is where it says "ScriptError: could not find label 'test'." It's unable to find the line that says "label test:" (including the colon) If that line looks right to you, then the next thing I'll ask you to do is to either screenshot or copy/paste that section here so I can see it.
You can't add it directly to the animation; ATL doesn't support playing sounds.
This is how I would approach doing it:
1) Figure out how often the animation loops (let's say it's 5 seconds) 2) Define a new audio channel specifically for this, so other sounds/music don't mess it up. You want renpy.music.register_channel for this.
3) Play the sound effect on that channel looped every 5 seconds.
It says that you didn't define "rds." You have to write a line that starts with "define audio.rds" so that Ren'Py knows what you're talking about.
Also, I notice that you're using the wrong Ren'Py version. DDLC only works with Ren'Py version 6.99.12. Before you do anything else, you're gonna want to uninstall that Ren'Py version you've got there and install the correct version. In my experience, bad things happen if you use the wrong version. (Like the game goes wrong in weird, unpredictable ways, including crashing)
I notice that you're using a later version of Ren'Py. If you look again at my original post, you'll see that DDLC requires Ren'Py version 6.99.12. It won't work with any other version.
I don't want to sound like a jerk, but I'm noticing a pattern in your comments that your problems seem to be coming from not following my instructions. Please follow my instructions in the original post. I tried to write them to be as clear as possible. If there's an instruction you don't understand, please let me know and I'll try to make it clearer.
This is a renpy documentation, that has a guide for almost if not everything you need to know. The Quickstart section should be enough to set you on track.
Check it from here.
All joking aside, what LunaMoon_xx said earlier about the Ren'Py version is correct. You need to download Ren'Py version 6.99.12 because that's the version Team Salvato used. If you use the latest version of Ren'Py, it won't work.
I still have to do a lot of reading on this myself, but I would recommend looking through the Ren'Py documentation on UI and buttons, and maybe looking through code files for the poem game (clickable text) and the menus to see examples of how it's done. Sorry I can't be more help than that now, but it might be a start for you.
I think I found something, but I haven't tested it. It looks like if you set the variable "_history" to False, it will stop recording history until you set it to True again.
$ _history = False ... $ _history = True
If you want to remove one line from the history, you can do so by adding this line right after the dialogue you don't want to show up (it will be removed before the player has a chance to see it):
$ _history_list.pop()
If you want to remove a whole segment from history (like when Yuri rewinds time), you can use this, specifying how many lines you want to remove starting with the most recent:
$ del _history_list[-37:]
To remove all history (like at the end when it's just Monika's bugged message), do this:
$ _history_list = []
You can change the most recent history message (like the bugged text which gets hidden by fake "real" text) like this:
$ _history_list[-1].what = "I don't even know what my dad would do if he found this."
There are some other tricks, but that should be plenty to get started with whatever you might be up to!
I took a glance through the code for definitions, GUI, and screens and didn't see the images actually being referenced. Then I looked at the Ren'Py documentation on custom GUI and was able to quickly hack in a super ugly blue button on the choice menus.
It looks like the key is to save the images in specific locations with specific names, "gui/button/choice_idle_background.png" and "gui/button/choice_hover_background.png". Ren'Py looks there for the images and uses them if they exist.
Now that still leaves the question in my mind where the defaults are coming from, but hopefully that will help you get the results you're looking for!
I know of two ways to do this. The simple way is to use the "choice" statement in Ren'Py. For one example, the poster in the background of the club room also has a 1 in 6 chance of changing during Act 2. Here's the block of code from definitions.rpy responsible for that:
image bg club_day2: choice: "bg club_day" choice: "bg club_day" choice: "bg club_day" choice: "bg club_day" choice: "bg club_day" choice: "bg/club-skill.png"
Five choices are the default option and one is the alternate, giving it the 1 in 6 chance.
The other option is to use Ren'Py's RNG function, documented here.
Hope that helps!
Hey there, I do in fact know of a place where you can learn this kind of stuff along with many other new and advanced features in renpy.
Check this page out for Audio help: https://www.renpy.org/doc/html/audio.html
Good luck ;)
You need to create an options.rpy file (or modify the original if you have it) that outlines what files you want to archive, otherwise the game doesn't know where to put them. Here's the Ren'Py docs on building distributions
Actually, I've been somewhat curious about this myself, as I have a blind therapist and I kind of wanted to show her DDLC somehow so she can better understand how bad it fucked me up lmao. I think Ren'py has a self voicing feature.
https://www.renpy.org/doc/html/self_voicing.html
Here is the documentation.
I'm trying to figure out what it would take to get it to work with DDLC, though, and some alternative text to give more weight to the scares would be great.
edit: Okay, I personally cannot get espeak to work past the Ren'py Launcher, but seeing as you might already have all of this set up, I'd at least recommend trying the 'v' key on your end. But again, a mod that would add additional alternative text would be good.
Use 7-Zip to extract the Our Time RAR file https://www.7-zip.org/download.html . It's free and does everything like if it was WinZIP or WinRAR except making RAR files.
You could maybe use the Scrap module to read the clipboard. Maybe spawn the box with the clipboard contents as defaults? Or have a magic text that gets replaced with the clipboard contents?
If you go to the DDMC Discord, people with the "Musician" role may be able to help you. (You can put a request in the #content_requests channel) You can also look up any site that offers "free to use" music.
Everything from "if persistent.playthrough == 0:" to "label endgame(pause_length=4.0):" is the code that makes it go through the original game, so yeah, you'll probably want to delete that and replace it with a call to your mod.
Hmm... well, it looks like chapter is 0 when the poem game is called, and going by that first screenshot, it's calling based on number 0, so on the surface, that looks right. (Darn, I was hoping it would be something simple) :P There's probably some error happening in the logic of the poem game code, but to be honest, I'm not familiar with the MASpoemgame_actone code.
Sorry, but I think I'm going to have to refer you to someone else... either the author of that code, or maybe someone in the #mod_help channel of the DDMC Discord. Maybe someone there will know more about it than I do.
Sorry again.