Skip to main content

On Sale: GamesAssetsToolsTabletopComics
Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines

Feniks

136
Posts
26
Topics
1,325
Followers
71
Following
A member registered Sep 25, 2019 · View creator page →

Creator of

Recent community posts

If your question is whether you can use a defined image displayable instead of a layered image - the answer is no, that's what a regular AlphaMask displayable is for. If your question is if you can use a defined image displayable for the mask image, sure! LayeredImageMask takes any kind of displayable for the mask, just like AlphaMask does.

Hello! Thanks so much for your interest. Honestly the parallax+zoom viewport has been sitting around on my computer in an almost-completed state; I just need to finish adding some examples and make a page and screenshots for it. I appreciate the prodding so I can bump it higher on my list to just get out! I'll aim for this month so it's not just sitting around gathering dust.

(1 edit)

Can you elaborate? The choice screen in this template is the exact same choice screen as a regular default project, just with the styling made explicit. You'd need to share this new enumerate and animation code you're adding and ideally how you're testing. I believe I recently saw an issue relating to ATL on the Ren'Py GitHub as well which may be relevant.

You need to create a persistent set, e.g.

default persistent.seen_endings = set()

and then you will add to that set when you reach a relevant part in the game (that's this part:)

$ persistent.seen_endings.add("end1")

and in order to record that progress for an achievement, you can set the progress to the length of the list e.g.

$ ending_achievement.progress(len(persistent.seen_endings))

Sets are used because they can't have duplicates, so the length of the list will be the number of unique endings the player has seen, and it won't matter if they go through the same ending multiple times/it won't count them more than once towards the achievement.

Hello! Feel free to adjust the size of the images directly (e.g. in Photoshop) - that said, the example screens are made specifically for 1920x1080 so you will be responsible for adjusting any styles or positions to suit your resolution if you want to use the provided screens. Otherwise, you can follow them as a template and design your own screen!

Show the screen instead of calling it, and make sure there's nothing on the screen blocking progress (including modal True). See this article for details on the difference: https://feniksdev.com/renpy-screen-language-basics-declaring-and-showing-a-scree...

This looks to me like you pasted the new files into an existing project - don't do that. It's a complete replacement. If you're on 8.2+ you can put this project into your Ren'Py project folder and then create a new game and select Easy Ren'Py Gui as the template.

Follow the examples in the docs: https://www.renpy.org/doc/html/style_properties.html#style-property-outlines

The standard is outlines [(1, "#000")] for example, which will be one outline, 1px wide, that's black.

Just delete your definition of it! You can hit Delete Persistent on the Ren'Py launcher to purge any achievement history as well during development.

Generally you'll just add the outlines property to whichever style you need it for! This template does mean that doing something like gui.dialogue_outlines = ... will not work because the whole point is to avoid all those implicit gui-style properties. But if you want outlines for the dialogue text, you can add it to style say_dialogue, or for all text, to style default. In general, if you want to add a property to something, hover over it with your mouse and hit shift+i to find the style you need to add that property to.

As it's just a template, you'd need to change the text in the screens and script  to the language you want the project to be. Unfortunately the template system can't grab translated strings to replace when creating the project. I suggest you modify the template itself with your language changes so you can generate new projects with that as the base!

Not quite CC-BY, as I don't permit the resale of the tool itself outside of a project, but for the most part yes feel free to use it in your projects, commercial and noncommercial, with attribution as outlined in the Terms of Use section 😊

Hi there! In-script, you can grant achievements with

$ achievement_you_made.grant()

Remember it'll only show a popup if you've got the configuration options set to allow them + you haven't gotten that achievement before. You can use the Delete Persistent option in the Ren'Py launcher to fully reset all achievements.

The problem is your angel image is not a layered image - if you don't have a layered image you'd just use regular AlphaMask and not the LayeredImageMask. Layered images are declared like layeredimage angel and have a specific format that Ren'Py expects. I suggest you look into it, as it's the modern and simpler way to put together images with multiple layers. https://www.renpy.org/doc/html/layeredimage.html#LayeredImage

You need to use mesh padding or increase the transparency around your image to accommodate the outlines, yes. Mesh padding will change the size of the image, so I recommend padding the image with transparency outside of the engine.

You'll always have at least a small quality change when resizing images in Ren'Py also, which isn't under my control/it will look like that regardless of the outline being applied if you've toggled the drawable resolution property on.

Can you show an example of code which is causing this error, and the full error message? What Ren'Py version are you using?

Hello! You should turn on gl_drawable_resolution to fix this - it's an argument you can pass to the outline_transform transform via drawable_res=True.

So, when you say nothing happens - does it not grant the achievement at all, or are you just not seeing the popup? You can watch the status of the achievement by bringing up the console with shift+o and typing watch ACHex.has() for example. If you already have the achievement, it won't re-grant it. If proceeding past that line in your script does not change the achievement to being unlocked, then that's a different issue from it changing it and you not seeing the popup screen. If you're testing on Steam, you may need to clear the achievements from their backend as well. See the bottom of this article: https://partner.steamgames.com/doc/features/achievements/ach_guide

Sure thing! So, in your music room screen, add these lines:

screen music_room(mr):
    on 'replace' action Stop('music', fadeout=3.0) 
    on 'show' action Stop('music', fadeout=3.0) 
    on 'replaced' action Play('music', config.main_menu_music, fadein=3.0) 
    on 'hide' action Play('music', config.main_menu_music, fadein=3.0)

And that should cover most use cases! Feel free to adjust the fadein/out however you like.

Sure! The achievement itself is passed into the popup screen (by default, as the argument called "a"), so you can check for that and use a different background e.g. 

frame:
    style_prefix 'achieve_popup'
    if a is all_achievements:
        background Frame("my_platinum_frame.png", 5, 5)

I'm not 100% sure of the effect you're looking for based on your description, but if you'd like to fine-tune the transition speed then you'll use warpers yes.

You'll need to use dict transitions to have transitions only apply to specific layers! You can read more about how to set that up here: https://www.renpy.org/doc/html/transitions.html#dict-transitions

1. Yeah sure! It's just like any other class so feel free to add your own fields, or use the description field however you like (it's just an extra field which has no specific purpose in the code - you can set it to a string, or to a list or tuple of other information you want to access, for example). So you could use the description field as a genre field if you weren't confident about adding your own genre field! 

2. All songs are stored in the playlist field of the ExtendedMusicRoom - you can fetch an individual song's MusicInfo via mr.music_dictionary["audio/music/nutcracker.ogg"] where the path is the one you used to set up that song in the music room and mr is the extended music room the song is in. Typically you have to loop over the whole track list though, which is what the get_tracklist method is for! It'll return all the MusicInfo objects used by the extended music room. Usually that looks like for song in mr.get_tracklist(all_tracks=True): and then you can access song.name and song.description etc.

Hope that helps!

If you show a screen, it shows on the screens layer, which by default is above things like character sprites on the master layer. This is true of all screens, but you might not have run into problems before if you weren't using full background images in the screen. It can also show on top of the dialogue depending on the zorder (higher zorder goes on top of screens with lower zorder).

Hello! How exactly did you want it to work with dialogue? It involves viewports, which isn't usually a part of the say screen, so I'm not sure what sort of effect you're looking for.

You've made incredible progress Esh!! It's so exciting to see it all coming together ✨

If you want to check if the player is skipping a specific section of dialogue, you can check for if renpy.is_skipping(): (https://www.renpy.org/doc/html/other.html#renpy.is_skipping) at the start of that dialogue, and if it's true, grant your achievement. Otherwise, you can also add an achievement action to the Skip button on the quick menu (e.g. action [skip_achievement.Grant(), Skip()] on the quick menu button). The latter suggestion will *not* cover the case if the player uses a keyboard key like CTRL or Tab to start skipping; the best way to handle that more general case would be through a callback https://www.renpy.org/doc/html/config.html#var-config.interact_callbacks. If you're new to coding, I would wait to implement the last option until you're a bit more comfortable with Python! I hope that helps :)

Yep, you can apply the outline shader  to just about anything! I do also recommend you try playing around with Ren'py's built in outlines to see if you can get the effect you want, as the outline shader will be somewhat similar; you can apply outlines with decreasing transparency and increasing size through the outlines text property. Notably your example image is more a blobish suggestion behind each letter, whereas the outline shader (and built in text outlines) will be more like *glowing*. You might also be interested in my gradient shader tool if you want more blended gradients generally.

Good points! Feel free to make those changes; I've noted it down for my own version. I'll be going through all my tools at some point to test for 8.3 compatibility so I will add this in at that time :)

(1 edit)

Edit: lol I missed there were more responses as I had to step away and didn't refresh the page. Thank you for the updates! I'll leave my original response here anyway, and I do intend to see if I can have better line returns for errors.

Hmm, this seems fine to me. The custom.txt line is irrelevant; it's just checking if you've got the inline python tool installed and need linting for it.

How are you running the linter? From the launcher lint option, or from an in-game button? 8.2+ properly parses lines using the say_menu_filter, so you can run it from the launcher rather than the custom in-game button.

My other thought is possibly that you have an {else} split up across multiple monologue lines - these are considered individual lines when considering text tags, rather than one text block, so an {else} that was left open, then two newlines to begin the next line, will not continue the {else} tag.

I'll see if I can modify the linter to return an actual line to look at as well!

Can you share a sample of the way you're writing some of your inline conditions? I talked more with Nim above offsite and you may be experiencing the same issue.

Hello! I did not code the viewport with this in mind, but it's definitely an interesting proposition. I will keep it in mind for a potential future update! In the meantime you can potentially experiment with the xpan property outside of the viewport, which does seamlessly loop images. It won't work with how the viewport is set up currently, since it's expecting a fixed-size displayable.

Alright, and can you show me some of the code where you use the inline conditions? Particularly anywhere you have {/if} written, as the error indicates it can't find a corresponding opening tag. This can sometimes happen if the filter has been executed twice, but if you're on 8.0.3 and running from in-game that shouldn't be an issue.

Which version of Ren'Py are you on? If it's earlier than 8.2, you will need to use the in-game lint option (rather than the one from the launcher) due to how Ren'Py parses dialogue for lint. If you're on 8.2, show me the error from running Lint on the launcher. If you're on 8.1 or earlier, show me the error from running Lint in-game.

So what I'm understanding based on the code you've posted is that you're very new to coding. That's all right, but you will need to have a basic grasp of how variables (getting and setting them) work in order to understand how to use the achievement code. I really recommend you begin with https://feniksdev.com/a-quick-primer-on-variables-in-renpy/ and go through the rest of the tutorials in that series to see how to declare variables and update them. Then I recommend you read over the examples included with the achievements - you should follow the example very closely and just tweak things until they work how you want. A better understanding of variables will help you see what the system is doing and how you can follow the examples to do what you want. Good luck!

Can you share any code you've tried?

Aw thank you so much! I will do my best 💪

Thank you for this lovely comment! I'm always delighted to hear that my content has helped 🥰 I hope to have many more helpful tools and tutorials for you in the future too~

👀👀👀 Haha you have discovered my secret tool I've been working on since early this year - I'm hoping to release it in the coming months! The flowchart tool will be paid - it's incredibly feature-rich, and I've put a lot of time and effort into making it extremely flexible, to give you a heads up. And I'm delighted to hear you've gotten use out of my tools ✨

Delightful news, I had a chance to smash the two viewports' code together, and with a few tweaks, it's working fantastically! I want to do some more testing yet, and I think I'll add a property or two specific to this iteration of the zoom/parallax combo, but I imagine it should be out within the week :D