Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics


A member registered Mar 13, 2016 · View creator page →

Creator of

Recent community posts

I’ve played bot programming simulation games in that vein! Real-time is much harder though, you cannot just tweak the move duration with numbers (if you’re interested just search joqlepecheur, he makes a lot of puzzle/meta games).

I feel there’s a joke on a failing exit screen that forces you to Alt+F4, but not everybody may appreciate if they don’t know how to do that? Unless there’s another way to close the app? (I was looking for it, but the exit screen was completely stuck, pressing any key didn’t even send me to the main menu - just like in-game where sometimes pressing a key would not start the timer - so I had no choice but to Alt+F4)

Hey, I noticed a minor thing: “GitHub” points to GitHub’s homepage rather than your GitHub account.


Hey, wouldn’t it be better to use _unhandled_input instead of _input in, so events like clicking on a popup (if mapped to ‘continue_dialogue’ action) do not also continue dialogue at the same time?

For information, I put my use case below, but it’s a bit shady as _unhandled_input may not solve the issue at 100%. However I still think it’s a good idea to use, so I still post it as a general suggestion.

In my case, I had more an issue related with input event handling order: Dialogue always handled SPACE first to ‘continue_dialogue’, which ended the last dialogue bubble. Then my character would be free to talk to an NPC again, and my own _unhandled_input method would detect my ‘interact’ action (also mapped to SPACE) and restart the dialogue, so I was stuck in an infinite loop. Using _unhandled_input instead of _input in made it handle the event after mine in a given frame, forcing ‘interact’ action to be checked again next frame, where SPACE was already consumed, so I had to press SPACE again to restart the dialogue as expected.

However there is no guarantee of order between different _unhandled_input methods, so I shouldn’t rely on that. But at least, if a developer has an actual _input to implement he’d be able to process that before

In the end I was afraid the input handling order would not be guaranteed in release build, so I just delayed allowing the character to interact with a NPC at the end of a dialogue by 1 frame, just enough not to process SPACE to start the dialogue again.

I guess, otherwise, that the best solution is to take full control of inputs, by not mapping anything to ‘continue_dialogue’, and instead make your own action, process inputs based on context and priority order, and then if we should continue dialogue, call next() manually on the Dialogue instance.

Was it in a slope like the first curve, or inside a loop?

If so, that is a known issue although hard to reproduce, I will add it to the list of known issues and try to fix it in a future patch.

If it was in another place though, please tell me where so I make sure to fix this location too.

Thanks! I regularly transfer colors from one app to another to make sure they match between my assets in the game, so that would be very useful!

I followed the video and set Frames = Burst Particles = 3 (not sure about the exact relationship between Burst Particles and Frames, I assumed I was created 1 Burst per frame, but I also have a setting Particle Number = 10 which must not be taken into account by the Render simulation), and Post-Frames a very long time (1000). But it wasn’t enough. Post-Frames tooltip says “The renderer won’t stop until this frames have passed or no more particles are alive.” The negative-or formulation is a bit misleading, I believed it meant it takes the Maximum of Post-Frames and lifetime but apparently it takes the minimum, fine. But even then, the renderer stopped very early. Also, few particles seem to be spawned.

Increasing Frames to a number like 8 creates a longer animation, but forces more particles to be spawned at the start.

In other words, I have to way to really get the same result as Burst:

  • spawn many particles on start, but for a brief moment (Particle Number = 10, Burst Particles = 3; not sure if that means I’ll create 30 particles over 3 frames, but it matches what I want)
  • render this until all particles are dead

Here is a GIF comparing myself manually pressing Burst several times, and the Render for 4 Frames, for instance. The Burst still looks cooler for subtle reasons, I think particles have more “holes” between them so the FX is less chunky (I’m looking back at the comparison and it strikes me less now, though). It’s also possible that the Randomness gives me the impression of Burst in editor having more variety than the Render, which must have a fixed seed…

In any case, I think a checkbox to Render Burst would be very useful, as there seem to be no direct match between Frames settings and

Related to this, there is a bug where the range is not computed correctly if [min, max] crossed angle 0 modulo 360. For instance, if I want my PFX to send particles flying between -10 and 10 degrees, I would set Min = 350 (this is -10 modulo 360) and Max = 10. But then the program just reverses both values and do as if it was [10, 350] which covers most angles.

Instead, I want 350 to be recognized at -10:

The workaround is to right-click on Direction Min so you can input a negative value, like -10.

Either the gauge (or slider, following OP’s suggestion) should naturally allow negative values (range -360 to 360), or the program should interpret Min value as really the Min value, and do a complete counter-clockwise turn until it meets the Max value, modulo 360. If the user really wants the range to go the other way, then they must reverse Min and Max values themselves.

(1 edit)

It seems that only one color blend mode is available, which is close to brighten:

It may be nice to have other blend modes available like Multiply. In my case I want the orange particles to overlap and the result to still be the same orange (not sure how that Blend mode is called).

UPDATE: ah, I found the blendmode (additive, normal, subtractive) in the Particles > Basic menu, not in the Color tab. Normal blend mode does what I wanted.

Bonus bug: you must also left-click on the color you want to change first (Birth, Min, Death) so your editing is taken into account.

After changing the 3 values for RGB, I realized the color didn’t change at all. I needed to left-click on Birth, change RGB, then do the same for Min and Death. I wish we could copy-paste colors to make this faster, but that would be a suggestion for another thread.

For now, to focus on the UI issue: to avoid having the user edit a “ghost” color for nothing, maybe gray out the RB HSV interface until a color is actually selected. Alternatively, allow editing color “in the void” but then add a small button or drag and drop system to assign the temporary color to Birth, Min, Death color.

Another bug: I right-clicked on Birth, Min, Death color and noticed there was a popup similar to Alpha, RGB/HSV values, where you could enter a number. I thought it was great to enter a hex color, allowing me to copy-paste colors from another app much faster. It turned out the field only supports numbers, which don’t make sense for a color, and therefore: a. entering an actual number like 100 does nothing b. entering a hex like df7126 or #df7126 makes the app crash with error:

action number 1
of  Step Event2
for object uiChanger:

unable to convert string "df7126" to number############################################################################################
gml_Object_uiChanger_Step_2 (line 27)
(1 edit)

In the Color tab, we can edit RGB HSV values by inputting numbers directly, but we must right-click on the field first. This is important when we want to paste precise values from other applications where we copied R, G, B values.

However, the value input in the number field is ignored if just right-clicking. You need to first left-click, which will set the value to something based on the mouse position, apparently to confirm focus. Them, you must right-click and there, the number you enter will be recognized and the value will be updated.

Platform: Windows Version:

Same issue here. The resulting dimension seems correct (it’s the minimum bounding box that can contain all of the sprites), but the origin is not offset so we only get the top-left part of each.

Here is another hotfix for this check index, but v, not v-1 this time:

# replace `if text_node.cleaner_text[v] == ".":` with this:
if v < text_node.clean_text.length() and text_node.cleaner_text[v] == ".":

It will avoid the error, although we are now using the pause duration for ‘.’ and not ‘…’, but v was incorrect anyway so there’s a deeper issue behind. All the characters are still displayed normally.

(1 edit)

I sometimes get a related issue, even with the continue hack.

Invalid get index ‘11’ (on base: ‘String’) for a string of exactly 11 chars: “Hm, okay…” The dots are important, they make us enter the block below: (line count includes the continue hack):

if v-1 < text_node.cleaner_text.length():
    if punctuation_marks_pauses.has(text_node.cleaner_text[v-1]):
        if text_node.cleaner_text[v-1] == ".":
            # invalid index here
            if text_node.cleaner_text[v] == ".":
                _pause_t += punctuation_marks_pauses["..."]
                _pause_t += punctuation_marks_pauses[text_node.cleaner_text[v-1]]
            _pause_t += punctuation_marks_pauses[text_node.cleaner_text[v-1]]

It doesn’t surprise me that much since we check for v - 1 < length but not v. What surprises me then is that it doesn’t systematically fail, since I’m always testing with the same string. Again, it must be because that v variable suddenly goes up by 1 at the end of the iteration.

OK I’ll have a look. I just realized in the meantime that I could also play on my numpad to simulate arrow keys without sending wrong input. I’ll try this too.

It’s well hidden, but follows some logic… I’m considering adding better visual cues in a future update, though.

Ah, I see thank you. What was missing for me what the backspace! I was clicking in the middle of the word and saw no caret, so just thought it was not editable. I didn’t expect backspace to clear the full word, but it makes sense if we follow tag’s convention.

Maybe a colored background would help understand we’re dealing with a single chunk of text to delete. Problem is, this convention is used for tags (or email address “blocks” in clients like Gmail) and user may expect to be able to put multiple of them… but we can only put one category.

So I’ll go with this for now. Maybe it would be cool to auto-highlight the current category, so typing the first letter would immediately replace it with search text… I’m not sure if this is easy to do. If other users found out about Backspace, it should be fine too.

Hey, I find the game very smooth and easy to handle, but I noticed that it’s not possible to “shadow train” (press the arrow keys in rhythm while the opponent/dad is singing to prepare for the incoming repetition) without losing progress (going to the right on the battle bar), which eventually leads me to lose if doing it too much.

So I end up just tapping on my arrow keys without pushing them to try to catch the rhythm, but if I push a key by accident I’ll lose a “point”, as any arrow pressed during opponent’s turn does this.

Would it be possible to disable arrow key handling while opponent is singing? If later in the game there are overlapping battles where both characters are singing together it may be a problem, but otherwise that would make shadow training much easier.


(2 edits)

OK, so I have some hypotheses about what’s going on: a. The for loop increments x but text_node.visible_characters is unrelated. Somewhat, this value may increase more than expected at some point b. The for loop itself is correct, but text_node changes in the middle of the loop, due to parallel handling of other events. For instance:

func _input(event):
	if event.is_action_pressed("continue_dialogue") and ! event.is_echo():
		if current_json_path != "":

may be run in parallel as the user presses Space just when the text reaches its last character, causing dialogue to advance to next text node. As a result, the text_node has now a different number of characters (but in practice, when getting the error text_node.visible_characters was always exactly text_node.clean_text.length()+1 (so 1 over the limit), so it doesn’t look like text is unrelated.

considering the length of the text seems to have changed between the for statement (which should check v < text_node.clean_text.length():

c. clean_text itself is changing during the loop… but I don’t see where.

So I can run it under WINE, but I have two issues:

  • 100% CPU usage on 1 processor. Pretty common issue on many graphical applications (including games built natively for Linux, not just under WINE). YMMV depending on your graphics card + driver
  • Of course I must save in my WINE file system, but if you know how to get those files back to your Linux drive easily it may not be a problem for you

That’s it. Since no Linux version is planned I’ll switch to Windows when I need to make PFX.

After opening the purchase or collection popup on a game page, I noticed a problematic behavior with the mouse.

Clicking inside the popup, holding the button outside it, and releasing the button outside the popup will close it (more details for repro below).

This sounds like a weird thing to do, but actually happens when trying to highlight text inside the popup and overshoot a bit before releasing the mouse.

To be more exact:

  1. In the browser (at least on Firefox), this only happens when clicking on the popup area, but outside a text field. This covers most cases since highlighting text is particularly useful for text field (e.g. to copy or delete your address in the purchase by card form), in which case the popup doesn’t close even if you overshoot. However, if you want to highlight and copy non-editable text on the popup, the issue remains.
  2. In the desktop app (which is just using a embedded web page, really), at least on Linux, it always happens, even if you highlighted from inside a text field. I discovered the bug while actually trying to highlight and clear a field in the purchase form.

I don’t know why this particular behavior differs between browser and desktop. Maybe preventing popup close when the click started inside the popup would fix the issue on both sides altogether.

Repro example:

  1. Go to a game page
  2. Click on Add to collection
  3. Hold mouse click inside text field, and release button outside popup => only desktop version should close popup
  4. Redo 2., but hold mouse click outside text field, trying to highlight normal popup text. Release outside popup. => both versions should close popup

Interestingly I had the very same issue on Discord. However, the browser version didn’t have the issue, a bit like here. So it may really be a difference of default behavior on Firefox vs electron (or whatever you use to embed html), and this would need to be made explicit for consistency.


You can get the background image in Firefox with right-click > View Background Image, but with Chrome you’d have to check the page source code. So I uploaded it along the game executables as “picosonic page background 4x.gif” to make it easier. Enjoy!

Same issue here. The string had 8 characters but for some reason, in my iteration x reached 9. But it happened only once, as soon as I placed breakpoints to debug, the bug disappeared and it now stops at 8 as expected…

Thank you! I didn’t do anything special to support DS4 (I tested Xbox-like controllers though) so I guess the PICO-8 web template was just good enough. Reminds me of InfernoPlus saying he can’t play most games on Steam with DS4, but he managed to make Mario Royale work with it. Maybe web tech has just something that makes it easier (that said, I managed to use all of my controllers including DS4 on PC when using Steam Big Picture)

When you have many Collections, it becomes harder to add a game to a specific collection as you need to find it in a dropdown that sorts them by most recent usage to oldest usage (i.e. if you’ve just added game to collection C, C appears on top), not alphabetically.

I see two ways to make this easier:

  • make a hybrid search/dropdown field: type the beginning or part of the collection name to filter them out and possibly highlight the matching substring. Gamejolt does this when you click the + button “Add to Playlist”
  • add a button on the Add to Collection popup to toggle Alphabetical sorting instead of Chronological usage sorting. Gamejolt always sorts alphabetically, which I find easier, but if you want to keep the chronological sort then the toggle is a nice solution. Alternatively for users who always use one or the other, you can add the toggle in the User Preferences. But you can have it in both places too.

This has been mentioned in briefly but I’d like to make a proper thread for it.

This is part of site localization and should be done in coordination with the ongoing site text localization, except this is on creator’s side.

Currently, only one version of the page description can be made. To write it in other languages, you need to rewrite the same information in a different language below, which looks like this: (EN + JP)

It’s fine for short descriptions, but when the get longer the user has to scroll to read text in the language they want.

By letting the creator edit the list of languages used for description, and a description text field for each language (would probably be some dedicated class “Localized Text” that just appears as multiple fields in the editor), the creator can prepare multiple versions of the description.

Then on visitor side, we can display the description in one language at once:

  • first pick the preferred display language that user can set in Preferences (maybe not the same as interface language as some people prefer e.g. keeping navigation text in English but long text in their native language). It could be a list of languages ordered by preferences too, since many games won’t have your 3 favorite languages but some may have one or the other. Ex: French > German. If French is available, it is shown. Else, if German is available, it is shown. Else, a warning “no favorite language supported in description, defaulting to language X” is shown and it shows the first language X added to the page (which may be English, or something else).
  • still add a dropdown to let user pick another language if they want to, without having to go back to their language settings

This could also be applied to devlog posts and other content, although description is the more important (some devs may not localize each of their posts because it takes time and money, while still localizing page description).

Note that this is about page presentation only. Game language is another issue. For that one, you’d use the usual meta-tags, search filters, and possibly a Steam-style warning “game not available in your language” (this is actually more important than the warning for page content not available in your favorite languages, which is already obvious). Of course we’d encourage developers to write page content in languages A, B, C if game is available in A, B, C. But other threads can tackle the issue of exposing game languages to the visitor.

(1 edit)

Were you playing on the web version, or did you have issues on standalone too? Web version definitely has audio lag, but I didn’t feel control lag (time between input and character motion), so what made it hard for you to play?

Otherwise, targetting 30 FPS would make it more stable indeed, but I’ll try to fix my inefficient physics and heavy background rendering first, I really want to have steady 60 FPS like the original games.

Thank you! I didn’t have time to edit a video, so thanks for yours too!

I’ll try to bring some updates in the incoming weeks.

Thank you!

Exactly! Although I didn’t add spin dash due to lack of time and hope to add it at some point.

Thanks! And good catch, I’ll fix the “Angel Island” in the stage result.

Sure, you’re welcome.

The cut enemies would be like ships with shields on the sides than can only be hit vertically? Ah, reminds me of Zelda: Skyward Sword…

The slide on the Magic Countdown page shows a linear law, which means the countdown is meant to reach zero with a square law. I guess with an inverse exponential law, you could make it last indefinitely too. Or you could actually implement the Being Watched system but you’d need an eye tracker (but it would work at low cost in a first-person game where you watch time on a diegetic clock!)

The 2 main endings are about 2 strong life choices and last one not really, and in general you end up finding the 3rd ending last, so you leave with a less arousing feeling… but it’s fine! It matches the movement of the player character, and it made me smile as I thought “alright, that’s a way to avoid the normal ending indeed…”.

In other stories (e.g. Hunter x Hunter), you’d have two choices following the rules and the 3rd one would be to break the wall!

Yes, I found it afterward, although I’d say it’s a bit anticlimactic!

(2 edits)

Very nice design! I like the combination of skills! And two button controls, was it enforced by some fantasy console or just an extra challenge?

The progression is nice despite the difficulty of having a open level. Of course, metroidvania unlocks help manage that so I never felt I was “in the wrong place” except when there were no checkpoints for a moment and I was wondering if I wasn’t approaching a boss too early (see more below).

I find too bad that it doesn’t explain you can press X then Z to land mines, it turns bullets into mines and adds another layer of tactics. It’s nice to discover but I think it may be part of the core explanations. How to use them efficiently, would be the player’s job.

There are still a few quirks:

  • some long corridors / chain of screens without checkpoints (esp. in the bottom-right area)
  • checkpoints not displayed on map, at some point I didn’t save before a difficult challenge and when coming back, I realized I could have saved by going to a neighboring cell already visited just before going to the challenge
  • it’s unfortunately bound to the 4-color palette, but it’s hard to see in the middle of a mess of your own mines and bullets, and your enemies’ (esp. where you’re used to shmup with different colors for enemy bullets). This becomes critical in some bullet hell sections (although depending on your strategy you can be more defensive and shoot fewer bullets while making things last longer).


I hurried to the last boss room as I had 10 seconds (*) left, wasn’t fully prepared but it was a challenge to make it with 4 hearts. I noticed you can move onto the boss which opened new possibilities (I switched from defensive to aggressive… and it worked).

* I like the countdown putting pressure on you, it makes the experience feel very intense. But… don’t tell me it’s a Metroidvania countdown? ;)

Hey, looks like the zip is named Super_Retro_World_Dungeon_pack_week50 instead of (the name displayed by Otherwise, is the name in relationship to some 52-week challenge, or does the number simply get incremented on new update?

So I found this game from the composer’s SoundCloud, and was intrigued.

I see this game has been made in one month, so I understand why it’s at this state of development, and won’t give a lot of feedback, as you’re probably aware of most issues. I think it’s still possible to make a nice platformer in one month, but you’d need to have some previous experience/code, and make it smaller. Unfortunately, the requirement for making a metroidvania doesn’t help, unless the level designer is a different person than the programmer (which apparently isn’t the case in your team).

I’ll give random feedback on things not about platforming first:

  • The title shout doesn’t match the written title! Don’t tell me you combined a random sentai shout with a random sentai logo!
  • you can get hit by an enemy off-screen and it’s a bit hard to kill it to go to the next screen… I guess all rooms are loaded in advance in the same scene, and only the camera stops at a room’s edge?
  • jump’s SFX is a bit too much?
  • with Blue’s power, you can hold rocket fire indefinitely and bounce on walls while only slowly descending… I think it was the coolest move! (but I didn’t reach yellow as I died soon after)

Most of my feedback would be on the core platforming experience, but not that much interesting as you can find good platforming principles from various sources (how to make variable jump, avoid wall friction, allow character to jump shortly after falling, etc.). If you want to make more games of the genre, I’d recommend making a clone of some famous platformer (just the physics and a simple level, or even just an area), or if you don’t have data for full cloning, pick a list of common features, implement them, and tune physics parameters to make it feel good (the second approach is better if you want to train your design feel). Once you’ve done that, you can redo it much faster, even during a jam, so you don’t waste time with common platforming mechanics and can spend more time on the unique features of the game (e.g. the combat skills and Blue’s rocket power).

Good luck for your next game!

Hm, interesting, although it would be fairer to make the key experience satisfying, I’m not sure how to do this in such a short game (in a real game, it gets boring very quick when you cheat so it would be easy to demonstrate).

I thought the third ending would be to get both the key and the crowbar for some very funny outcome, but not quite…

The 2 main endings make sense and resonate with actual life choices. Also dev choices ;)

I failed on the chocolate ice cream recipe, as mixing Cocoa and Sugar only gives a Cocoa/Sugar mix… is it really useful? Probably since the mix exists, but the description is really telling me it’s not really chocolate and it’s too late to cook…

I eventually found I had to cook the Cocoa first, without any Sugar.

Game design

The game has a bit of Automachef with machines but since it’s not automated, I’d say it’s more a try-and-guess combination game in the end. Unlike point-and-clicks where only 2 or 3 combinations will work just to solve the puzzle at hand, many things work and you can keep them aside for later if not exactly what you want, so it encourages experimenting!


I suggest you enable debug mouse control, it makes things easier when playing on PC (standalone or browser). You can easily find doc on this, or refer to this example of mine: function toggle_mouse at (check REORDERED on my profile to see what it looks like in the browser)


The BGM lacks coherence. If you’re beginning with composing and don’t want to go full throttle with music theory, I’d recommend you start with a background beat, then add a few melodic elements with a strong leitmotiv. Then make another phase B, then another phase C, and with the PICO-8 editor insert phases like A-B-A-B-C->repeat. This way you can get consistency and a bit of variety at small cost (in the long term you still get repetition, but it helps).

Aha, I live in France and had no idea what it was, so I tried to make a Croque-Madame without ham, which just gave a Toasted Egg Sandwich. We actually call a French Toast “Pain Perdu”, but we mix the eggs and bread first to make it golden, as frying the egg first would result in a Toasted Egg Bread with Sugar…