In ph3, everything that is made as an object will listen to object funtions. So if you want to modify rendering -> Render Object Functions. If you want to influence movement -> Object Movement Functions. Etc etc. Do keep in mind that for some reason not all functions respond to the objects. I've just noticed that Primitive 2D sprites do not respond to ObjMove_SetSpeed while it did in 0.12. Even though some functions are implemented in ph3, they aren't always truly working. PlaySE for example won't play any sounds at all. You need to use Object Sounds.
Regarding Object Sounds, a small explanation:
If you think Object Sounds are independent unique sounds which will no longer be "overwritten" by the same sound (when repeated), you've got it wrong. While it almost looks as if the author intended this, it is either unfinished or he failed. Let me explain further.
let objSound = ObjSound_Create;
ObjSound_Load(objSound,<Marisa's Master Spark>);
ObjSound_SetDivision(objSound,SOUND_SE);
ObjSound_Play(objSound);
loop(120) { yield; }
Obj_Delete(objSound);
Let us say our sound sample is Marisa's master sparks sound. A quite lengthy sfx. So the above code is a simple object sound spawn, setting the path, division and playing it. After 120 frames (2s at 60fps) it will be deleted. So if we play this 2x with 0,5s interval, we will have 2 sounds technically. Sounds simple right? Wrong.
First of all, the previous master spark sound is instantly interrupted by the new one. You might think due to the object ID handling, it should have a unique ID and therefore not interfere. Second disappointment is that upon calling Obj_Delete, all master spark sounds will stop playing. Again this is baffling as we though the Object Style scripting would solve all this. My guess is that each sound file (wav/mp3) can be called once in the memory of ph3. Just like 0.12m, playing the similar sound will interrupt the previous.
I am guessing SoundDivision was intended, however, not responding or working at all. Not sure if the author is aware of this.
So there you have it folks, more knowledge for your work. Oh and if you want to mimic PlaySE use this handy function:
task PlaySFX(path)
let objSound = ObjSound_Create;
ObjSound_Load(objSound,path);
ObjSound_SetDivision(objSound,SOUND_SE);
ObjSound_Play(objSound);
loop(120) { yield; }
Obj_Delete(objSound);
}
Above can be expanded with more parameters for the delay to delete. It is though important you delete your object sounds eventually, otherwise it will possibly cause performance issues.