Skip to main content

Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines

tofurocks

110
Posts
20
Topics
1,162
Followers
168
Following
A member registered Apr 01, 2016 · View creator page →

Creator of

Recent community posts

Hi there, I'm the writer for Angel's route and I'm so happy you connected with xem! This truly makes me feel fulfilled as a game developer and writer. Making sure that Angel came across authentically was one of my key priorities while writing so I made sure to consult with folks with similar/adjacent lived experiences, and I'm glad it was worth it to let you feel seen.

Thank you so much for playing ♡

Good mystery and intrigue with brilliant banter, and absolutely gut-wrenching at the end. Love this.

Depending on if you've already customized your project or note, you can begin programming your GUI by using this as a base. I may recommend the other template I maintain as well if you want more features set up:
https://tofurocks.itch.io/renpy-gui-template

Otherwise, follow the instructions on this thread for just the code you want to use:

https://lemmasoft.renai.us/forums/viewtopic.php?f=51&t=48322

Hi there, what's the issue you're encountering? 

(1 edit)

Hello elduator,

 PRINCESS INTERNET CAFé and I discussed this last year and this was the ruling we determined:

Thanks for your patience, we've discussed it and have come to this verdict.
For an "icon" in settings where a electronic device is used to communicate via text, the following is allowed as GUI for the visual portion:
- Individual letters, words, and characters (such as in languages like Chinese or Japanese) in any language, stylized within engine
- Standardized Emoji Sets



There is a creative workaround I used in my own entry, HRT Simulator 2023, however. The icons below the "video" portion are actually cropped squares from the background. This is what the Ren'Py code looks like:

image icon_chair = Crop((350, 400, 100, 100), "sprites/background.png")
image icon_cowboy = Crop((570, 280, 100, 100), "small:sprites/background.png")
image icon_tsun = Crop((200, 200, 100, 100), "sprites/background.png")
image icon_frog = Crop((1670, 790, 100, 100), "sprites/background.png")
screen member_list():
    text "Members — 4" align (0.225,0.65)
    vbox:
        align (0.025,0.95)
        spacing 100
        
        hbox:
            spacing 50
            hbox:
                spacing 20
                add "icon_chair"
                text "72CollectiveChairs" yoffset 30
            hbox: 
                spacing 20
                add "icon_cowboy"
                text "CowboysKissing69" yoffset 30
        
        hbox:
            spacing 50
            hbox:
                spacing 20
                add "icon_tsun"
                text "IcedCoff33Tsunami" yoffset 30
            hbox:
                spacing 20
                add "icon_frog"
                text "UrFavoriteFr0g" yoffset 30


Hope this provides some inspiration!

From what I understand of the rule, it's to prevent someone from making objects move in the background?

That's the correct reason, yup.

Weltschmerz had some very light point and click elements in it and was made in Ren'Py, and those screens are assembled using Imagebuttons:

transform explore_size:
    zoom 0.78
    xoffset -1941
    yoffset -110
transform explore_zeke:
    xoffset -950
    yoffset -100
    zoom 0.78
transform train_effect:
    parallel:
        linear 0.7 xoffset 2
        linear 0.7 xoffset -2
        repeat
    parallel:
        linear 0.7 yoffset 2
        linear 0.7 yoffset -2
        repeat
screen explore_1():    
    imagebutton idle "mg" action Call("anywhere_1") at explore_size, train_effect
    imagebutton idle "fg" action Call("anywhere_1") at explore_size, train_effect
    imagebutton idle "door_p" action Call("door_check_1") focus_mask True at explore_size, train_effect
    imagebutton idle "zeke side" action Jump("proceed_1") focus_mask True at explore_zeke, train_effect

screen explore_2():     imagebutton idle "mg" action Call("anywhere_2") at explore_size, train_effect     imagebutton idle "fg" action Call("anywhere_2") at explore_size, train_effect     imagebutton idle "door_p" action Call("door_check_2") focus_mask True at explore_size, train_effect     imagebutton idle "zeke side" action Jump("proceed_2") focus_mask True at explore_zeke, train_effect

If you're using a different engine, then you can use whichever method is easiest for you. Good luck!

Hi Snarxgamer, thanks for your feedback! We just wanted to get back to you and confirm that NSFW content will not be a part of Blood & Play, either in the main story or as DLC, as several members of the team are not able to work on such games. We apologize for the late reply and inconvenience, but hope you will enjoy the game nonetheless.

If Julien has million haters, then I'm one of them.

If Julien has one hater, then I'm THAT ONE.

If Julien has no haters, then we're entwined in each others' arms in a homoerotic embrace.

Fuck Lazarus but also, fuck Lazarus, all my homies are gonna fuck him (up)

Thank you based hosts, nearly all of my team members have either fallen sick or been going through a lot in late Jan to early Feb (including myself) so the extra days will help us relax a bit. We'll still be submitting a demo, but we can take a little extra time to tackle some odd bits and ends!

I too attend 馬鹿外人高等学校

Oh wow, thank you so much for reading it aloud! Your voice is so lovely and you got most of the intended intonations right for each stanza. We didn't expect anyone to do any LPs of this game since it's rather short and a bit hard to swallow, but we're grateful nonetheless. 

(1 edit)

Thank you for catching that error with the build! We've updated the build to reflect the OS.

As for Ending 4, follow these steps:

For the Potion, choose the ingredient at the bottom of the screen for each of the 3 rounds. These should be: Ashgreens, Seablossom, Pure Light.

For the choices:

  1. Sage must be dealing with something difficult.
  2. "How are you feeling?"
  3. Distract them
  4. Distract them


Thank you for playing!

That's intentional and indeed the end of the game! Thank you for playing 🙏

I love you big big sea snake man

Hi there ashleecraft, thanks for asking! We can confirm that the name label/speaker names indeed does not count towards the word limit. In the future, please be sure to direct all your questions to the main FAQ thread so we can keep track of who we've already answered. Happy jamming!

(1 edit)

Making stuff is hard as is, and sometimes store page customization slip our minds right before launch! Don't skip out on it though: a good thumbnail and page design can get more people to interact with your content. Here's a few scattered tips to help you make your life easier and pages look nice~

Stop Re-Uploading Your Entire Projects To Fix One (1) Typo!

Get familiar with butler, itchio's command line tool for uploading projects more efficiently (it works a bit like pushing updates to GitHub)! Here's a nice Youtube tutorial by Skyride Studios about how to install butler for those who need some visual help.


If command line is a bit intimidating, you can try Sean S. LeBlanc's GUI Butler tool to see if it works for you.

butler's very handy if your internet upload speeds aren't where they should be or you're in a game jam with a tight time limit. To do this, make a page and set it to Draft or Restricted so it exists. Then, if you upload a base file of your game via butler, you can save a lot of time on the next upload as butler will recognize reused code and only push differences on the respective channel. As a bonus, players who download your game via the itch app will automatically get all the updates as they go live.

Customize Your Page Assets!

Are you uploading enough screenshots and filling in the information for the Metadata of your project? While you can release a project on itch.io without messing with that stuff, it definitely will help your project look more professional. See Easy Releasy by Jannik Boysen or Itch Game Page Image Guide & Templates by Star West for some tips on this.

Having trouble getting images down to 3MB each? Compress and optimize .webp, .png, and .jpg images using TinyPNG, and your .gif animations with ezgif.

If you're fancy and know your way around CSS, you can email itch.io support telling them how you plan to customize your page using CSS and they'll be able to activate it for you. Be sure to follow the best practices! There's even a handy live editor on CodePen to play around with it.

As far as thumbnails/cover images go, there's been multiple informal studies/tests that show that having a thumbnail that clearly shows a character's face and a legible logo gives a boost to CTR percentages. .gif thumbnails do even better with this. Ones that loop cleanly are pretty nice.

List Your Content Warnings!

Due to the nature of this bundle, some projects might have sensitive content that people might like to know before they go in so they can mentally prepare themselves. It can be a little hard to figure out what all to list though, so take a look at this article by Sisters in Crime. Remember: depiction is not always endorsement.

---

Got any other tips for everyone else? Feel free to leave them below!

Got a project that you're not sure fits the theme? Here's a thread where you can ask us if you're not sure about it. The last thing we want you to do is self-reject when you'd benefit from participating!

Examples of well-known games that we might not accept into the bundle:

  • Stardew Valley has mines that contain fantasy enemies, but the game as a whole isn't necessarily Horror or Halloween-y.
  • Any Final Fantasy game has lots of fantasy enemies, but the game as a whole isn't necessarily Horror or Halloween-y.
  • Rune Factory has fantasy enemies and magic, but the game as a whole isn't necessarily Horror or Halloween-y.
  • Dragon Age features an expansive magic system and world, but the mages and the Fade is not the main focus of the game.
  • Undertale is a game comprised of mostly monsters, but the main vibe isn't very spooky itself.

Alternatively, you can send an email to projectenso.publishing@gmail.com with the subject title [QHSB2023 Theme] [YOUR_PROJECT_NAME] to ask us if your game fits!

Hi there, unfortunately Meitu uses training data based on stolen artwork so this would not be allowed. Additionally, there may be slight shifts in the selfies even if unintentional. We encourage you to find Creative Commons assets for your sprites or find another way to photomanipulate a photo of yourself.

Hi there! This sounds like that'd be a CG, which would take up your BG and character/sprite slot. Was there a specific kind of context that might alter the way its depicted?

Hey, I know it's been a while but it was so nice to meet you at GDC! I finally found the time to play your bitsy game and wow, the way you tell the story through the different levels is really incredible and poignant. I'm looking forward to trying out the rest of your games soon as well!

https://tofurocks.itch.io/weltschmerz

Hi all, sorry for replying so late on this. After searching for answers in previous year's boards I wasn't able to find a conclusive answer but I vividly remember another developer asking about this, so it must be lost in Discord now.

My verdict: a custom transition will count as GUI.

Unless I'm misinterpreting the context, I believe this will count as your voice acting.

Thanks for your patience, we've discussed it and have come to this verdict.

For an "icon" in settings where a electronic device is used to communicate via text, the following is allowed as GUI for the visual portion:

  • Individual letters, words, and characters (such as in languages like Chinese or Japanese) in any language, stylized within engine
  • Standardized Emoji Sets

From your description, it sounds like this is a looping background, which is totally fair game! I'm interested to see how a rotating BG does versus a BG that scrolls past, so I'll be on the look out for your project 👀

RE: Music Room

You're right on the money with that one; the order that the songs are defined in do affect the way the actual Music Room plays in. We'll be fixing that in the next update!

Hi there, we went back into the extras.rpy file to check the behavior of the Music Room and the buttons are supposedly labeled correctly, according to the documentation.

            hbox:
            # Buttons that let us advance through tracks.
                textbutton "Previous" action mr.Previous() alt "Previous Song"
                textbutton "Next" action mr.Next() alt "Next Song"
            null height 20

However, upon testing the template, it seems that your observations are correct: clicking on Next will cause Ren'Py to play the song listed above (or loop back to the bottom of the list). We'll notify PyTom about this bug unless it is intended behavior.


We also apologize if the template is difficult to adjust for 1280p. Have you tried using the Change/Update GUI button on the Launcher?

Hi there, thanks for your patience over the holidays! Just to be sure, which version of the template are you using? We hope these answers are still needed.

1. Your persistent.typeface for notosans-regular is not the same between gui.rpy and screens.rpy, therefore Ren'Py isn't recognizing when you have the typeface set to Noto Sans. The easiest way to fix this is by changing the line in Font Size to if persistent.typeface == "/gui/font/notosans-regular.ttf"

2. To ensure that the Line Spacing setting takes effect, please add the following to your say screen styles in screens.rpy.

style say_dialogue:
    properties gui.text_properties("dialogue")
    xpos gui.dialogue_xpos
    xsize gui.dialogue_width
    ypos gui.dialogue_ypos
    adjust_spacing False
    line_spacing gui.preference("dialogue_spacing", 2)

3. For the custom screenshakes, please note that $ shake() only corresponds to the small_shake in the template. Other strengths are at the bottom of the below block.

init python:
    # Shakes the screen. To use, put
    # $ shake()
    # inline. For other uses, simply do a check inline for ATL statements,
    ## or a ConditionSwitch for shaky images.
    def shake():
        if persistent.screenshake:
            # renpy.with_statement(hpunch)
            ## Uncomment the one above if you prefer the default screenshake
            renpy.with_statement(small_shake)
        else:
            renpy.with_statement(fade)
            ### OPTIONAL: Show a different effect if screenshake is turned off.
### Custom Screen Shake Effect by BáiYù
init:
    python:
        import math
        class Shaker(object):
            anchors = {
                'top' : 0.0,
                'center' : 0.5,
                'bottom' : 1.0,
                'left' : 0.0,
                'right' : 1.0,
                }
            def __init__(self, start, child, dist):
                if start is None:
                    start = child.get_placement()
                #
                self.start = [ self.anchors.get(i, i) for i in start ]  # central position
                self.dist = dist    # maximum distance, in pixels, from the starting point
                self.child = child
            def __call__(self, t, sizes):
                # Float to integer... turns floating point numbers to
                # integers.
                def fti(x, r):
                    if x is None:
                        x = 0
                    if isinstance(x, float):
                        return int(x * r)
                    else:
                        return x
                xpos, ypos, xanchor, yanchor = [ fti(a, b) for a, b in zip(self.start, sizes) ]
                xpos = xpos - xanchor
                ypos = ypos - yanchor
                nx = xpos + (1.0-t) * self.dist * (renpy.random.random()*2-1)
                ny = ypos + (1.0-t) * self.dist * (renpy.random.random()*2-1)
                return (int(nx), int(ny), 0, 0)
        def _Shake(start, time, child=None, dist=100.0, **properties):
            move = Shaker(start, child, dist=dist)
            return renpy.display.layout.Motion(move,
                          time,
                          child,
                          add_sizes=True,
                          **properties)
        Shake = renpy.curry(_Shake)
    $ small_shake = Shake((0, 0, 0, 0), 1.0, dist=10)
    $ short_shake = Shake((0, 0, 0, 0), 1.5, dist=15)
    $ med_shake = Shake((0, 0, 0, 0), 2, dist=20)
    $ long_shake = Shake((0, 0, 0, 0), 2.5, dist=25)

To utilize the other strengths, please copy the base def shake(): definition and rename it appropriately. Additionally, the default persistent.screenshake variable is located at the top of accessibility.rpy.

Let us know if you have any other questions or encounter any other issues.

Thank you for reporting this error, we'll do our best to investigate the cause as soon as we can. Would you be able to tell us which version of Ren'Py you're using and what OS you're running on?

In the meantime, you can still open the source files in your code editor and use the code in there to assist you with your projects.

Unfortunately due to the lack of indents in the code you posted, we can't determine the issue. Can you post it again using the proper code block in the post formatting or send us your project files to tofurocks.games@gmail.com? If all else fails, you may want to transfer your game code to a fresh copy of the template.

(1 edit)

Thank you for the shout-out! Let's keep making great games together 💪

Thanks for your patience. You might have accidentally duplicated your game menu screen's use navigation line. Can you share the code for the game_menu and extras_menu?

Seems like both the navigation and extras_navigation were separated properly. Can you show me the game_menu screen and a screenshot of the issue?

Thanks for your patience. It looks like you may have accidentally combined your regular and Extras menu navigation. Would you be able to share the code you have for both of those screens? You can also press Shift+I while playtesting your game to see what screens are being shown there.

This was such a ridiculously fun little game, just loved the entire experience all the way through.