Ruskul's Forum Posts

  • Sweet thanks!

  • I can't find what Release(); actually does, or when it gets called.

    Is this when an object is fully destroyed? Is there a method to override when an object gets placed or removed from the internal construct pool? I'm pretty sure I asked this like a year ago, but I can't seem to find what I'm looking for.

  • Edit: According to Ashley, c3 does not pool objects behind the scenes. Advances in garbage collection have made this practice not nearly as important as it was 10 years ago. c2 used a generic pool behind the scenes, and recycled objects, but in most cases this isn't a concern anymore. In specific cases, where 100s of objects are being created/destroyed, pooling them is worth it, though either addonsdk/js will have far superior results than doing so in the event sheet.

    -----

    Hey all, I'm wondering, when creating a behavior,

    if I declare the following in the constructor for a behavior instance (instance.js):

    this._state = [false, false, false, false, false, false, false, false];
    			this._lastState = [false, false, false, false, false, false, false, false];
    			this._enterTime = [0,0,0,0,0,0,0,0];
    			this._exitTime = [0,0,0,0,0,0,0,0];

    Does that get recreated everytime the object instance gets created/destroyed? I know construct pools objects and so it isn't truly destroyed, but I wanted to make sure I wasn't creating a bunch of arrays that get garbage collected. If so, is there a better way to create arrays to avoid garabge collection in the c3 context?

    This will be on bullets, so thousands will be getting recycled every few seconds. Every tick I will need to save _state to lastState, and any changes or updates to states get logged in the corresponding _enterTime and _exitTime arrays.

  • Ah, that makes good sense.

    If there is no editor for c3ide2, what exactly does it do for you?

    I like that with cside, I can add a action and that I cal fill out the details and it auto generates the json definition and language file, etc... It has a nice level of hand holding that limits the number of stupid mistakes you make (like defining parameters, etc...)

    Part of my issue is that I tend to sketch as I go. As often as not, I am brainstorming what I need as I write it. I tend to have have something loosely in mind - (for example, I'm tired of using events to calculate the dot product, so I make a plugin to do it, or similar).

    But I'm also constantly adjusting my behaviors, either splitting them apart, or combining them to afford me maximum flexibility and minimise repetitions in events. (not being able to nest families, or extend behaviors from behaviors, or share them is all part of the issue )

  • I know its a 2d game maker, and it excels at it, but i just wish they'd put a little more into 3d. With just a few more things it could be really great for 3d too.

    Honestly, I have to totally disagree here. Given limited development time potential, the addition of 3d features when many crucial 2d features are still missing feels like a pointless distraction. Construct competes very well on the 2d scene with other engines, but it would start to be arguably the best in that realm if a few more crucial features existed (hierarchy view, for example). Adding to 3d won't allow c3 to better compete in the 2d space, and it really can't compete at all in the 3d space. We don't even have good support for working with 2d vectors at the moment, let alone 3.

    Currently, I can think of a lot of good reasons to use c3 for 2d games... but 3d? There needs to be a lot more work than just a few features added and all of that would take away from the needed enhancements.

    Back when c3 was still just a discussion, there was alot of talk about how c3 was supposed to add the ability to author behaviors and plugins from within c3 via events. That would have been massive. Instead we got scripting, and a limited api. Don't get me wrong, that allows for some cool stuff, but it can't compete with unity, its massive api, and the superior performance of c# over js (let alone the fact that js sucks for making games with for a plenitude of reasons - it has benifits, and c3 being on the browser is an advantage). But 3d requires way more work to lift off the ground, and being able to create custom tools is a huge part of the lift requirement. Even with the sdk, good luck extending the c3 editor. Good luck scripting your own render pipeline. Good luck extending anything in construct... because currently, you basically can't - not like you can in many other engines.

    Making a 2d game engine is alot of work. 3d is exponentially more work., especially if you want full fledged support.

    If construct doesn't add more tools to extend and customize construct (including the editor) there is no way you will be able to do anything outside of cookie cutter 3d work.

  • It's beyond me as I do not know anything about addon development, but, are you using developer mode? Maybe you already are, but wanted to mention just in case!

    https://www.construct.net/en/make-games/manuals/addon-sdk/guide/using-developer-mode

    Yes, thank you for asking though. I currently am using c3IDE to build behaviors, and it is also super helpful, but I notice it doesn't catch alot of errors before export.

    But I'm also pretty sure its a js thing, and I'm just not used to the dev cycle for it. Mostly things like, you can't call this._someFunction at runtime, but you can sure as you please include it without warning.

  • I especially love cryptic error messages like "cannot read properties AQ.tz of undefined W_S.ao at Yu.d_q"

    Lol, Yu looks quizzically sad T_T

  • So... as much flak as unity gets for having to recompile everytime you change a script, that look is much faster than making adjustments to behaviors or plugins.

    I'm deep into development now, and there are 2 things that really stand out.

    1. Why do I have to leave the construct editor to author sdk files when I should be able to do that in the same place I can write js blocks and script files?

    2. Debugging addons takes place in 3 places. 1st you have your ide, then you have to solve errors if the addon can't be loaded. (things like 2 parameters expected in description, only 1 found), then lastly in a running project.

    Then you have to relaunch c3 everytime you make editor side changes. While previewing a project is super fast and no compile time exists for editing events, the cycle for sdk addons is pretty slow.

    This is more of an observation than a real complaint and was curious if others speed things up.

  • So... You have a server. Its serving addons. You have an issue with the server, but thats okay, you don't need to work with a project using those other addons at the moment. Except construct has a problem with that. Construct wont start if it can't load those addons.

    You can't remove those addons, until you correct the server.

    This is pretty much an idiot loop...

    For some reason c3 wants 2 addons. It decided out of the blue it can't get A, despite the fact that I haven't had it hosted in a while and am not using A in my current project, and have b hosted instead.

    Why must I exit construct and ensure it can load an addon, so I can unload it?

  • This is totally stupid. Why can't we open projects with invalid expressions? We have to somehow correct them, but not through the editor.

    Not sure why, or how the project has an invalid expression, but I have to save as project folder, manually find the offending lines, correct them, and then open.

    Why does construct not allow us to use the editor to correct errors?

    The kicker is that I have no clue why it decided the expression was invalid and wouldn't open the project. I didn't have to fix it, because simply shutting it down, restarting everything and opening the project back up made it happy.

  • Hey all,

    If I access an object via js block as such:

    	runtime.objects.sprite3.getAllInstances();

    And then I later rename the object to oneRoyalPita , the JS blocks all need to be updated. Just to clarify, is this expected or am I doing it wrong?

  • Try Construct 3

    Develop games in your browser. Powerful, performant & highly capable.

    Try Now Construct 3 users don't see these ads
  • Hey all,

    I have written up 3 suggestion on github. They are all realted, but to keep it simple I seperated them. Please go and upvote if you find these useful.

    ----

    First, GetCollisionEngine is not included in the sdk API, meaning officially, we can't make behaviors like 8Direction and Platformer. This is a request to, at minimum add that call to the sdk, though I would like expanded access to GetCollisionCandidates, GetSolidCandidates, PushOutSolid, and a few others.

    github.com/Scirra/Construct-feature-requests/issues/153

    ----

    Secondly, PushoutSolid naively assumes users only wish to resolve overlaps with a solid object. It also is tied to Custom Movement, which limits its usefullness across families. I want this functionality available to any object, regardless of whether or not one has the solid attribute. Any object with a collision poly, should be able to perform these actions. Have you ever wanted two of your characters in a game to not overlap? Yeah. There is no reason PushOutSolid is restricted to resolving Solids, and is not simply, PushOut.

    github.com/Scirra/Construct-feature-requests/issues/154

    ----

    Lastly, PushOut action has a hardcoded max distance that it checks, if no solution has been found, it aborts. My suggestion is that an additional property is added that allows the user to define this distance. Each game is different, and this hard coded number creates performance issues. Secondly, many collision engines allow for partial resolutions, instead of a full solution in one frame. By adding an additional property "Should Always Resolve", if no solution was found, the instance will still be pushed in the desired direction, by the maximum specified distance.

    The benefit is that for many collisions performance will be improved while at the same time the quality of customization and use will be increased.

    There is no reason for the behavior to have hard coded assumptions about what the user needs, especially when it takes a significant performance hit to undo what it does.

    This suggestion would allow dt based push-outs over multiple frames easy to implement, and importantly, much better performing.

    github.com/Scirra/Construct-feature-requests/issues/155

    ---

    TLDR: These should all be easy to add and will vastly improve the the usability of PushOut while increasing performance in specific cases as well.

    ---

    Additional points. While I can't make a common set of ACES, I have made a behavior that does the above, and use it instead of custom movement. But it uses undocumented calls to c3 internals. It is not possible to make the above without at least having an expanded api.

  • Ashley , also _inst is in the manual too

    construct.net/en/make-games/manuals/addon-sdk/runtime-reference/base-classes/sdkbehaviorinstancebase

    So... What is the difference between:

    this._inst.GetWorldInfo();

    and

    this.GetWorldInfo();

    In the context of behaviors: Nothing??? Seems like there are both methods for getting those things as well as properties, and no real guidence as to which we should use and why?

    Why bother with this.GetRuntime when I can just say this._runtime ?

  • It is not intended that anyone looks at internal code?

    I would strongly caution against trying to infer what kind of code you ought to be writing from internal code.

    But there are no other examples to refer to! The manual has few to no examples for most entries, and the forum support for JS is quite limited. What in tarnished brass trumpets are we supposed to do ?!... this is getting very exasperating.

  • construct.net/en/make-games/manuals/addon-sdk/runtime-reference/base-classes/sdkworldinstancebase

    this._worldInfo is in the manual. I haven't seen it used anywhere else, which is why I was asking.

    I ask about saving the reference for the simple reason that the documentation isn't clear about what exactly GetWorldInfo() does and doesn't provide guidance on best practices.. If it is simply returning a reference that takes no work to collect that is fine - but I have worked with a number of Engines that can have to do quite a lot of work for internal calls like that, and its safer to just cache everything you use (assuming what you got wasn't just a copy of the data).

    I'm authoring behaviors for the purpose of saving performance and would like to avoid naive use of the api. Without examples of how to use it, or further documentation , there really isn't any place to look but the official behaviors and plugins. Its silly to expect users to master the provided api with basically 0 examples.

    To add further difficulty, you can search the sdk manual, and get 0 results for an item that is in the manual sometimes, or links to only one page when it is on 5. The moral of the story is that it is quite difficult to simply refer to the manual to figure out how to do something, and much easier to look at a behavior you KNOW is already doing that thing.