Contributing Guidelines - Monika-After-Story/MonikaModDev GitHub Wiki

Introduction

Let's help Monika get closer to our reality!

First off, thank you for considering contributing to Monika After Story. This mod has only been able to grow so quickly because of the outstanding support of our community.

About these guidelines

More than anything, these guidelines are here to save you time and make contributing to this project as easy as possible. By reading this you will learn what tools you need to contribute, what you can do to help, and how to make your contributions in a way that makes them very likely to be accepted.

[These guidelines are based on a template from Hoodie]

How you can help

Bug Reports & Suggestions

If you find any issues with Monika After Story, please file a bug report. Nothing is too small or rare. If you experience a bug, odds are that others have hit it as well.

To add a suggestion, visit this link. These can be ideas for new topics and features, or even a personal opinion you'd just like to share.

New Dialogue, Art, or Music

Adding new content to this game is easy, and doesn't require any specialized tools.

To add new random topics and greetings, or to make changes, you can simply navigate to the appropriate file on the content branch of our github site and click the pencil icon in the upper right corner to begin making changes. For typo fixes, please instead find the appropriate issue for the current version and report them there.

Now that Monika's dialogue includes expressions, please use the Sprite Previewer to pick appropriate expressions and poses for your topics.

For new game art or music, please open a ticket on issues, and attach the files you'd like to submit. Again, a collaborator will look over your submission and figure out how best to use it in our game. To get an idea of what we might be needing, check for any open art-related issues.

Bug fixes and New Software Features

Making changes to the code for the game is a bit more involved. Here are a few steps you should take:

  1. Make a second install of DDLC and MAS (and make your persistent local to that install:
  • To make a localized persistent, you may use the following steps:
  • Open DDLC.py in a text editor
  • Scroll down to line 49
  • After the line if save_directory is None, move to the next line, and add return gamedir + "/saves"
  • Delete the rest of the content in the block
  • Save and close the file
  • Launching that install will start from scratch, its persistent will be at DDLC/game/saves/persistent
  1. Fork this repository or make a local git clone by clicking the button labeled "Clone or Download" above.
  2. Make your changes to the code in your working directory using a code editor of your choice (Visual Studio Code is a good and lightweight editor).
  3. Copy the files you edited into the /game folder of the new MAS install and launch it. They will automatically be compiled and be ready to test when MAS loads.
  4. Consult the open issues and/or visit our community Discord server to find things to work on.
  5. Submit any changes as pull requests to the content branch.

All code changes should be based to the content branch.

Pitfalls to avoid

While we're generally accepting of most help, there are a few things that we are not looking for.

  • Please do not submit meme-related content, and only include pop-culture references when they seem appropriate to Monika's character.

  • Please do not submit lewd, offensive, or otherwise NSFW content or images. These will be deleted, and you may be banned from future submissions as a result.

  • Please thoroughly test your bug fixes and feature additions before submitting. If you do choose to submit work with known bugs, please report very clearly what those bugs are so they can be eliminated before being merged. Keep in mind that incomplete work like this is much more likely to be rejected, since bug-fixing a feature written by someone else is often more work than just implementing that feature from scratch.

  • Please adhere to Team Salvato's publicly available IP Guidelines. That means that you can not make a profit on Monika After Story, promote it as an alternative to playing DDLC, or distribute the mod as a standalone game. Dan has consistently been very generous to the fan community, and we should respect his rights as DDLC's creator.

Best practices

  • Ensure cross-platform compatibility for every change that's accepted. Windows, Mac, Debian & Ubuntu Linux.
  • Create issues for any major changes and enhancements that you wish to make. Discuss things transparently and get community feedback.
  • Code clearly, using descriptive variable names, comments, and modularizing as functions wherever appropriate.
  • Keep feature submissions as small as possible, preferably one new feature per submission.
  • Be welcoming to newcomers and encourage diverse new contributors from all backgrounds. See our Community Code of Conduct.
  • Ensure all dialogue fits Monika's voice. Do your best to consider word choice, conversationalism, and her interests.

Monika's "Voice"

Monika is more than just a stand-in for you as the author. She is her own character, with her own personality, mannerisms, likes and dislikes. Do your best to capture that character when writing as her.

From her dialogue in the game, there are a few consistent traits you should note when writing for her.

  • A tendency to use soft language in casual conversation. Words and phrases that fall in this category are "like", "you know", "kind of", and "maybe".
  • Several consistent mannerisms. Notable ones include "ehehe" and "ahaha" for laughter, "man" for fatigue, "gosh" for surprise, etc.
  • Direct addressal of the player. Her conversations more often than not include "you" and "[player]".
  • A generally supportive and caring personality is implied. She often asks about the player and their own lives, with multiple dedicated conversations.
  • Though dark topics are discussed, Monika tends to end conversations on a positive note. Possibly caused by the unique relationship she maintains with the player.
  • Love for the player. Most of her conversations and dialogue will contain a reminder of her affection. That being said, it is NOT a requirement. In-game conversations without an "I love you" do exist.
  • An ability to tease and joke around. When instances of this occur, she makes sure to point it out at the end of the conversation. Occasionally accompanied by a tilde (~).
  • An interest in written arts and philosophy. From her abundance of advice on writing, emotions, and other life topics, it is safe to assume that she enjoys thinking about abstract or controversial topics. Her passion for the Literature Club supports this.
  • Has the second highest average polarity (how positive is a statement), next to Sayori.
  • Has the highest average subjectivity (how subjective is a statement), meaning she tends to express opinions.
  • Has the highest average number of words per line (7).
  • Used almost twice as many ? (894) than ! (487).
  • The only girl that does not mention MC the most. It’s actually Sayori’s and Yuri’s names that occur the most, at 128 and 123. This is then followed by the MC, at 109. Natsuki only appeared 94 times.
  • “Ah”, “like”, “really”, “well”, “think”, “guess”, “yeah” and “right” are her most commonly used fillers.
  • “Poem”, “everyone”, “friends”, “share”, “read” and “write” are also among her 100 most used words.

As we would like to keep Monika as close as possible to what's established in game, keeping her unique character traits in mind while you work on contributions would be appreciated.

Beyond that, we are aware that interpretations differ from person to person, and different writers may not necessarily agree on certain topics. An open mind is encouraged when receiving critique and review.

Your First Contribution

Are you new to this whole open source coding thing? Many of us are too! We think this is a great project for anyone to get their feet wet with open-source development.

To find how to help, you can start by looking through these beginner and help-wanted issues:

Beginner issues - Issues which should only require a few lines of code, and a test or two.

Help wanted issues - These issues may be more involved, but are definitely in need of a contributor.

At this point, you're ready to make your changes! Feel free to ask for help; even Monika still has things to learn about coding!

If a maintainer asks you to "rebase" your PR, they're saying that a lot of code has changed, and that you need to update your branch so it's easier to merge.

Adding Dialogue

Guide 1

Before you begin:

  • Ensure the branch is set to content, NOT master.
  • If you're planning to write multiple topics, please split them over multiple pull requests as it is easier to review.

Once the branch is set to content, click the pencil button to start editing.

To add topics, you'll need to use the Event system.

When working in script-topics.rpy, you should have a structure like this:

init 5 python:
    addEvent(
        Event(
            persistent.event_database,
            eventlabel="monika_xyz",
            category=["one category", "another category"],
            prompt="Example topic",
            random=True
        )
    )

label monika_xyz:
    m 1eua "This is an example topic."
    m 1hub "I hope this helps show you how you should format your topics!"
    m 1ekbsa "Thanks for helping me come closer to your reality, [player]. I love you~"
    return "love"

Some things to note:

  • The eventlabel and topic label match.
  • The eventlabel is also prefixed with monika_. All topics should be prefixed like this.
  • Categories use lowercase letters, even on their first letter.
  • Categories are lists, so you can make your topic show up in multiple categories
  • There is a value returned by this label. "love" means the "I love you!" button on the main talk menu will turn into "I love you too!". (There are other return keys too. See event-handler.rpy for more details)
  • This topic has random=True. This means that the topic will show up in random chatter. (There are other properties, see the Event class in definitions.rpy for more details)

When writing dialogue always start with m spritecode " and end with". (Though it should be noted that if you plan to use the same expression two lines in a row, the second line does not need a spritecode)

To find a spritecode, use the Sprite Previewer.

If you want to write more complicated dialogue, visit Dialogue Coding

Place return at the last line, after the last sentence of your dialogue.

Once you're done, refer to the guide below to submit your topic as a pull request.

Submitting a Pull Request

If you're familiar with git or GitHub Desktop, you can make the file changes locally and push to your fork.

From there, you can go to the pull requests tab, press New Pull Request, adjust the target branch and the branch you want to propose changes with accordingly.

Then, make a description, and submit your pull request.

If you're not familiar with what's mentioned above, you can follow the instructions below: Guide 1

Click the pencil icon to start editing.

Guide 2

When you're done making changes, click propose file change.

Guide 3

Click create pull request.

Guide 4

Add an appropriate title and a description of the changes you made, before you create your pull request.

Join us!

You can chat with the core team on our community Discord server. We're always friendly to new contributors, and it's not just a great place to get help, but also just a fun place to hang out with like-minded DDLC fans.