🤑 Indie game store🙌 Free games😂 Fun games😨 Horror games
👷 Game development🎨 Assets📚 Comics
🎉 Sales🎁 Bundles


A member registered 2 years ago

Recent community posts

We have been very busy with our new work at Hypixel lately. This is why things have been very quiet. Sorry about that, days aren't long enough to do everything we want '^^.

The IRC integration is working but yeah it can be greatly improved visually. Like others pointed out, maybe it isn't the best way to use our time when working on Superpowers. We will see how it goes. Even though it is not necessary, an integration right in the app does sound nice to me.

As an ETA for the next update, we acheived most of the things we wanted to do. I hope we manage to release it this weekend! No promise though... ;)

The IRC integration is basically done and ready to be used. So we are gonna give it a shot like this and see how it goes.

If it turns out to be a shitty idea, we will be happy to change our mind and recommend to use Discord instead with a link to the server directly in the app :)

Hello! We are going to switch to an IRC channel pretty soon! You can already start using it right here.


In the next release of Superpowers, the channel will be integrated within the app to provide a better experience with the community.

You can do something like this:


In Superpowers, your class will be automatically accessible from any script. You don't have to import/export.

Hello! From the server manager window, you just have to double click on your server in the list and it will open the server hub in a new window. Is that what you are asking for?

(Edited 1 time)

You need to click on the splash screen to skip through it. The app is currently being redesign and there won't be this idle screen anymore since it's quite confusing.

Hey! But this is cheating!

Just kidding :p Nice work. I would refrain from changing the API though because it could make difficult to help each other out.

An other idea would be to initialize activeScene variable to the value of the first scene instead of null. In this case, you won't have any problem with the first Sup.loadScene from the settings.

LukeLanFaust created a new function, loadScene, that must be called instead of Sup.loadScene to do the extra-work. This means you can't use the startup scene option from the settings anymore. You will have to call it yourself from code.

Tu peux supprimer un behavior en faisant :

Sup.getActor("Un acteur").getBehavior(UnBehavior).destroy();

PS: Je suis un ours.

Maybe a screenshot of the problem could help?

When creating a project, you can use the platformer template to have something you can work on.
If you want more complete projects, you can check out here https://github.com/superpowers-extra

(Edited 1 time)

The Sup.registerBehavior is a function mandatory at runtime to let the engine know which behaviors are available.

The process to show available behaviors in the scene editor is different. It's done here on the server when applying changes to a script.
And yeah, we don't handle behaviors nested in namespace.

It also explains why it works if you move it to the namespace after setting it.

Je confirme que c'est un bug qu'on a fixé dans la version de développement.

Désolé, la prochaine version risque de prendre encore un peu de temps avant d'arriver.

Hello! There is no proper ui component in Superpowers. But you can manage to do it like so:

let camera = Sup.getActor("Camera").camera;
let mousePosition = Sup.Input.getMousePosition();
let ray = new Sup.Math.Ray().setFromCamera(camera, mousePosition);
let result = ray.intersectActor(Sup.getActor("Button"));
if (result.length > 0) {
  // Hovering the button

  if (Sup.Input.wasMouseButtonJustPressed(0)) {
    // Just clicked on the button

} else {
  // Not hovering the button

Hope it helps!

The pixelated mode basically means that the texture is rendered as it is (with no interpolation). Looks like to me there is a bug in the live update process but if you close and re-open your asset, it should get back to normal. Can you try and report ?

Someone is already creating a plugin which allow you to install a library through npm directly from a project to make this simpler!

We haven't tested it much yet but we saw some feedback saying it's working fine!

I'm not sure I can give you any magical advice for now.

One of our long-term goal is to let you choose which assets should be loaded when the game starts. You could only load what is needed to display your menu at start (which should be a lot quicker) and then load the rest of the assets while the game is already running. No ETA of when it will be implemented though :(

What LukeLanFaust explained is the way to go. There will not be a built-in system for that because there is absolutely no concept of active scene in the engine. Sup.appendScene(...) will create some actors and stuff from a data structure. Sup.loadScene(...) do the same, except it will destroy all current actors first.

But once a scene is loaded (or appended), you can create or destroy anything you want. That's why an active scene doesn't make very much sense.

I hope that's clear enough :)

Okay, it's my mistake. My example was for a spriteRenderer when you were trying to do your stuff with a modelRenderer.

I edited my post with the correction ;)

This mean that your actor doesn't have a sprite renderer with a sprite on it.

(Edited 1 time)

Okay, I found a workaround for now!

let renderer = (this.actor.spriteRenderer as any).__inner;
renderer.material.map = renderer.asset.textures["blue"];
renderer.material.needsUpdate = true;

Where "blue" should be the name of your map. Also note this probably won't work if your maps doesn't have the same size.

EDIT: spriteRenderer should be modelRenderer if you are working with a model. I didn't read your question carefully enough, sorry '^^

No the 0.19.0 was released yesterday so it will have to wait for the next one sorry.


First the tileMapRenderer is completely unrelated to the model. It's a renderer to be used with a Tile Map asset.
Then, there is currently no easy way to change the map on a model at runtime. You could do it with a Shader but that's a bit a work and there is no documentation on that yet so... Not sure what I should suggest you.

Hello! The tile in the bottom right is used to render an empty tile. So there should be nothing on it. Is that your problem ?

A tutorial to explain a bit how to work with tilemaps is something we should definitely add...

(Edited 1 time)

Making some progress. I found the culprit!

this.actor.arcadeBody2D.setOffset({ x: 0, y: 0.2 });

Changing the offset somehow mess things up. Now looking for a solution!

EDIT: Found it! There was a bug and it will be fixed in the next release.
Both your propositions are valid and will work then ;)

Alors c'est sans doute pas trop clair. Une scène n'est pas un acteur. Si "ScenePong" c'est le nom de ta scène alors mon code était complètement faux...

Donc plusieurs choses.

Déjà comme j'ai essayé d'expliquer de facon sans doute peu claire, tu ne peux pas faire Sup.getActor("ScenePong/Score"). Tu dois sois faire Sup.getActor("Score") avec le risque d'avoir un conflit si il y a plusieurs acteurs avec ce nom. Soi tu peux faire Sup.getActor("ScenePong").getChild("Score")

Ensuite, ta première ligne let Score = Sup.getActor("Score") ne peut pas fonctionner si ce code est appelé avant le chargement de la scène. Tu pourrais faire let Score: Sup.Actor; juste pour déclarer la variable. Et après le chargement de la scène, via un awake d'un behavior par exemple, tu pourrais faire Score = Sup.getActor("Score");

For the packaged version, it depends on which version of Chrome is packaged along. For firefox, it may work if you remove the "webkit" prefix ?

(Edited 1 time)

Do you have Chrome installed on your phone ? Can you try accessing a build directly from the browser instead of the packaged version ?

EDIT: Maybe this page can be of some help ? http://caniuse.com/#feat=pagevisibility
I needed the webkit prefix to make it work on my phone but maybe you don't ?

Does it work if you test on a browser on your PC ? It should work when you switch tab.

What browser do you use on your phone ?

Do you still have any error ? If yes, can you post them ?

The first line should outside anything.

The remaining can be outisde anything if you can access to the music or in a awake function.
In any case, it must not be in an update. Otherwise, you would subscribe to the event too many times.

Also, when you get some errors, make you sure to show them. It will help find the solution to the problem ;)

Hello! I'm the one who replied to your email ;)

Does the position of your "Cavemen" actor matters ? If not, I think its position wasn't on (0, 0). It may be the cause of your troubles (it shouldn't mess things up, so there is probably a bug somewhere). So could you try move it to (0,0) and report ?

We should add a proper event listener you could subscribe on Sup.Input.on(...).

For now, you can work around like this:

declare let document;
function handleVisibilityChange() {
  if (document.hidden) music.pause();
  else music.play();
document.addEventListener("webkitvisibilitychange", handleVisibilityChange, false);

Mais c'est normal de s'y intéresser ;)

Alors pour le premier cas, tu peux poster le bout de code histoire de voir un peu mieux ? Une idée à priori c'est que ton code se fait exécuter avant la création de ton acteur ? Autre chose peut être, dans Sup.getActor(...), tu dois passer le nom de l'acteur et c'est pas possible de donner un "chemin" du style Sup.getActor("Camera/Hud/Scoreboard"). Si c'est ta situation, ce qu'il est possible de faire c'est plutot Sup.getActor("Camera").getChild("Hud/Scoreboard"). Le getChild permet de récupèrer un enfant de ton acteur et cette fonction supporte un chemin.

Pour le deuxième cas, tu peux accéder à un behavior (et donc à ses attributs) sur un acteur comme ceci:


// En imaginant avoir la fonction setScore définit sur ton Behavior
class ScoreboardBehavior extends Sup.Behavior {
awake() { } update() { } setScore(score: number) { this.actor.textRenderer.setText(score); } } Sup.registerBehavior(ScoreboardBehavior);


Pour modifier le texte en code, voilà comment tu peux faire:

let monActeur = Sup.getActor("Scoreboard");

Si tu veux le faire depuis une Behavior attaché à ton acteur, ça serait comme ça:


En espérant que ça t'aide!

Oh my god, your username must be 3 characters long at least... So it was invalid indeed.

We improved the feedback on this in today's new version (v0.19.0). And it was really necessary...

Don't jump to conclusions too quickly :)

It's maybe not very clear (and it obviously lacks the documentation needed) but you can access uniforms on a spriteRenderer or a modelRenderer in code: `this.actor.spriteRenderer.getUniforms();`. This API is about to change but as v0.18.1, as soon as you modify the value you get, it will be applied to the shader.

In the next version, it will be `this.actor.spriteRenderer.uniforms.getFloat(nameofuniform);` or `this.actor.spriteRenderer.uniforms.setFloat(nameofuniform, value);` to match better the overall API in Superpowers.

Hopefully, that helps you!

For now, there is no built-in way to change the color of the background.

But what you can do is use a sprite large enough to cover your whole camera and place it behind every other actor.

More tutorial are definitely planned! Probably a lot of very specific demo to help get a hand on various basic features.

Maybe I can recomend the collision tutorial ? This may have too much information for beginning but it helps to get to something nice with, hopefully, enough explanation.

First thing first, we would need a node project type to write a server. We can only code the client side with the game type project for now.

Then it would be really cool indeed to have a nice API to help build a server. We haven't given much thought to that yet, but I think something will come up at some point :)