In defense of Construct 2

From the Asset Store
10 turrets rendered in 3D with top down and menu views. Three upgrade levels per tower.
  • I don't really get this talk about all these behaviour limitations? If my project needs something and a behaviour can be used then I use it. If there is no behaviour that suits my needs I make my own logic with the event system. What is the problem?

    If you need raycasting you can make your own with the event system. If the platform behaviour doesn't work for you, then make your own or tweak it.

    People seems to think that you are limited to only use the behaviours for the whole game. I only use a few and mostly do my own with events and functions that can be reused. I also work in Unity and Unreal Engine and you can download behaviours there as well but just like in C2 they might not suit your project and you simply make your own. So stop thinking that behaviours is a limitation. It's just a tool you can use if they suit your needs.

    I'm not saying that C2 doesn't have limitations. I'm just saying that behaviours isn't a limitation.

    Saying that you can't make a Super Mario clone in C2 is not true. It is actually pretty easy to make with behaviours and custom events and if you know what you're doing you would be able to make an exact clone of mario in no time compared to other engines like unity.

    I think this remake of Donkey Kong by Ribis in C2 is alot more complicated than a simple mario game and it shows what you can do by combining behaviours with custom events.

    Subscribe to Construct videos now

    So people who are saying that you can't make unique games with C2 are just not experienced enough. If you think outside the box and stop relying on behaviours and use the power of the event system instead you can create almost anything.

    And many people say that C2 isn't capable of making big hit games because there are so few good C2 games on the market. The truth is in fact that C2 attracts people without experience and most games released are to be honest pretty bad and the overall quality is really low. But the engine itself is capable of doing almost anything if you use it the right way but as any other engine it has its strengths and its weaknesses.

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • ....to say you couldn't create your own physics with events is not true.

    Your earlier point about making Mario with platform behaviour was valid, and I haven't tried so it could not only be possible but relatively easy to do now I think about it.

    I disagree about the physics, though. My game uses the physics engine and I find the limited access we have to box 2d api to be hugely frustrating - no kinematic bodies, many joint types absent, no raycasting or slope normal / collision point, even though many if not all of these are in the plugin code, you just cannot access them via c2.

    As Ashley says, I realise the engine is a compromise to please the vast majority. IMO it's just that in some cases the vast majority don't stretch these plugins, so the majority are more ambivalent than pleased.... said it very well above; my frustration comes from being limited to what the default behaviors have to offer because there is no access to more complex features like collision point - stuff you need if you're going to code your own behaviour modification using events.

    Overall I'm very happy with c2!! I'm just a little concerned that focusing on c3 could put adding features like better/deeper plugin access so far back that what we see now is what we will have in another 2 years.

  • snip

    I agree with all this. Got to say, reading about some problems make me feel like I live in a different universe or something. I can vibe with the sentiment that C2 feels limited because of certain assumptions about what users need and what they don't. The recent parallax discussion for instance springs to mind. But I don't see why we couldn't recreate Mario, or any kind of platformer gameplay we like, with the platform and solid behaviours and some events to supplement them.

    It's too much work to try and re-create the Mario gameplay so instead I'll do a shameless pimp and provide a small example of a Metroidvania/old-school Prince of Persia platformer situation in C2:

    This is all platform behaviour, solid behaviour, events, and a couple of extra collision boxes to check for types of surface and positions. So I wonder, how complex does anyone need their platforming stuff to be that they can't achieve it with the functionality already in place?

  • Ashley most behaviors are useful even for full fledge games when they are adapted, however it is painfull to see that doing basically yourself (not you, the user) your own event engine is not as easy as it should, I mean with the conditions, and actions, we should be able to create about everything we want movement wise (the only thing being pushing off an object's collision polygon maybe, a direct action for that could be nice but non mandatory of course, that is not the point), but to actually reuse said events, or even share them, well, too bad it is not as easy as using a behavior.

    Of course most beginners won't be able to use that to the full potential, but with the current low number of behaviors, most of them won't be able to make their game reach their full potential.

    How I see it (could be completely wrong but I do not see how):

    • By plugins I mean both objects and behaviors, effects could also be affected.
    • First off, official plugins update not tied with the C2/C3 engine when it is not needed
    • each plug can have a "stable" or "beta" status, all stable versions are availiable in case of breaking changes, the project retains the plugin number versions to download them as needed
    • Easy to use plugin store, with "official plugin lists" and third party ones, with a sorting by tags, authors, names, etc.., you want the plugin? Just click the version you need and it installs, right now updating third party plugins is a chore, would also help with conflicts of plugin names maybe.
    • Event-based plugins: obvious one, might be impossible but it still should be there if possible, can be shared the same way
    • Main runtime updates being also subject to versionning, so if a plugin is not compatible at all with it, we can be warned beforehand

    The end goal being that the editor can slide into a state where we are not tied completely with only "Official behaviors" being used, as we all know no decisions you will take will be good for everyone and that not every plugin you did can be maintained further for long, at least with that, there will be choices and alternatives for everyone, and sharing capx with other plugins can work out if said plugin version is in the store.

  • Just two words to add. I asked about that long time ago, and for some objects it was made. First for the sine behavior and then after many posts to the Fade behavior...

    If there is a parameter in the plugin/behavior you can change then you should be able to do the same in events. For every single plugin/behavior.

    Simple example: Drag&Drop. What if you want to change/limit the axes movement on the fly? Well you can't.

    You can't make event "on something" -> set sprite Drag&Drop to Horizontal only.

    You can't for some reason add another Drag&Drop behavior.

    You can't spawn/create object instance A with horizontal and instance B with vertical.

    You can create two different objects with different behavior parameters - this pointlessly multiplies drag&drop objects * 2

    You can create two instances of same object with different parameters settings - but then good look with keeping track what the hell is going on in events.

    And that's the only one behavior/plugin to show example.

    Because of that simple but very annoying things it's simply better to make your own d&d in events. But same time this denies the point of the behaviors. Instead of using and setting something what is ready to go in few seconds you are reinventing the wheel by creating entire behavior in events just to be able to set one thing.

    If you really want you can modify the behavior to suit your needs, but then it creates two more issues.

    1. You should not modify original plug/beh because at some point someone might do some optimization or bug fixing and your changes will disappear

    2. You can duplicate it, but then you need to keep track of the original plug/beh on every release just to see if nothing has changed. And you are ending up with two almost identical plugins that needlessly makes a mess in plug/beh list.

    EDIT: And like we heard a lot in the past. Saying that something may "confuse beginners" do not really apply here or anywhere else. 90% of events are confusing for new users by design.

  • [quote:2yss6zza]If there is a parameter in the plugin/behavior you can change then you should be able to do the same in events.

    This. 100% this.

    The biggest culprit for me was the fade behaviour, which has thankfully been fixed, but the point remains, if there's a number, I want to change it on the fly.

  • GenkiGenga - I agree with you 100% as I understand it. I know for a fact that coding background has hindered my ability to grasp simple event patterns that solve much more complex coding issues. I kinda get those "Oh, right, herp derp moments. And it is really cool that, as Ashley said, event scripting is a new land with new problems to solve. It is unique and some of the paradigms are completely new.

    I also like events better than coding, which may seem odd given my remarks. What I don't like is that the event system makes some things take more time than it should, this in turn compels me to code. It's those basic modularity problems that bug me... Like, why can't I define structures of variables and add them any object in any project. Same thing for object specific functions, and so on...

    Colludium was metioned in terms of making mario. To my knowledge, mario can be made using events alone, but you can't use the platformer behavior. I made a tilemap based collision detection system for resolving collisions using tile IDs and linear inequalities. Here is the problem though, given the lack of oop, making something like this in construct as far as I can tell, forces some bad programing practices. There are large swaths of events that nearly replicate other large swaths of events. As most would guess, editing this system becomes a big problem. The events are unmaintainable and as the scope of the project increases so too does the amount of time needed to add something new. I have over 2,000 events in the collision detection and response.

    It took much less time in javascript making a behavior to do the same thing (construct doesn't have switch statements which is a major problem in tile id collision detection.

    The final problem comes with sharing this. It would take a large manual to describe how the user must then use this system. In traditional code, I can force things to be certain ways via properties. In a behavior I can make sure that anytime variable A is messed with, variable B is also updated, but I can't do this in events.

    And this is all due to certain features lacking in the event system, like properties, and private functions, and scope for that matter.

    It doesn't come down to "You can't do it" but rather that you can't do it because its currently the wrong tool for the job. By and large the best ways to make advanced systems in construct is to bust out the sdk. I would much rather do it via events but... as I said above. Does this make sense?

  • Not sure Mario's the best example here...C2's platform behavior is fairly capable of that.

    That is where I must say point blank: the platform behavior isn't capable of that. That is what makes mario such an amazing example. You can make a approximation, but you can't make mario with it. And mario is a very old game. So when you make a game using c2 platformer, you are stuck with all it's inherent advantages and disadvantageous. You have made a c2 platformer at the core of your game, whatever the game may be. Now, obviously we want to avoid cookie cutter behaviors, right? Making a mario platformer behavior, would be cookie cutter. But in my mind, it would be no more cookie cutter than the current system. What I want, is to see behaviors boiled down to more basic ideas, and the platformer has to much going on in it that you can't control (ie, collision response).

    First and foremost, the mario games in the nes and snes era actually tolerates mario overlapping "solids". When collisions are resolved in a left/right manner mario is only pushed a maximum amount of one pixel per frame, out of the object. when marios head overlaps a solid, it is not resolved at all, but rather his velocity if <0 is set to 0.

    The genius of old school mario games lay in the sheer simplicity of how collisions are detected and resolved. The subtleties of how that impact the game are numerous but mostly positive. The collision resolutions often favor player intent rather than mathmatical precision. Its what makes mario a great platformer. Mimicking this system is possible in events alone. But for ease of use I wrote a behaviors because that made it much more extensible and reusable. It also reduced how much work I have to do per object in events in construct.

  • (insert list of problems with platform behavior)

    You nailed it. and this is like you said, just off the top of your head.

  • Rather than a bunch of different platform behaviors, how about a vast choice different behaviors?

    Parabolic jump behavior, gravity behavior, tanuki behavior, turtle pounce behavior, etc.

  • Tokinsom - ...I'm definitely interested in addressing this in the long-term with C3. However I can tell you getting a bulletproof movement with no difficult edge cases is extremely difficult even as an experienced developer working with a traditional programming language. Implementing movements in events and leaving it for the user to fix to their purposes probably just shifts this difficult problem to the user, which may be suitable for expert users, but probably is not much help to the majority of less-than-expert users.

    However (mostly aimed at other posts in this thread) I don't think it's fair to say that the behaviors are useless if they don't serve your purposes or they are missing your favourite feature request - as far as I can tell, they are very useful for the majority of users, and we frequently hear positive feedback about how effective the behaviors are for many users.

    I just wanted to say that the behaviors are indeed, not useless. But they are what they are and don't offer much beyond that if that makes sense. Its the lack of control at a finer level that I find "lacking". And I wholly understand your point about the whole average user vs expert user. But I think there could somehow be a way to accommodate both. I think the platform behavior is great for busting out a simple, normal platform game. Shoot, there is even gravity flipping available which is less than a common use case would need. So in that way, isn't the beginner- intermediate user base satisfied?

    I'm not wanting, more behavior options but rather access to more basic things. An advanced tookit, similar to what can be found in other engines, with good access in the sdk and in the event sheet is what I want... and it is important that they can be accessed seamlessly in both places. Things like ray tracing and surface normal info, Collision detection that yields more information, collision masks, bitmasking, polygon overlap area, point based collisions, and so on.

    The most that construct 2 offers at a low level is push out of solid, but that is it. You can access it as a custom movement behavior, or you can access it in the sdk, but that is the end of the tools for collisions.

    And as pointed out, it seems likely there amongst the advanced users there is more demand for the tools to make a platform behavior than simply a behavior that handles platforming, right? And I think this can be extended beyond the platformer behavior issue and apply to the rest of construct.

    High level tools can only go so far, if you can't modify them at a low level. Low level tools would enable much more possibilities and those are the types of things I want most in a game engine. Many of the behaviors work well in the way they are intended to, and they make good jump off points. But at some point one needs to delve deeper to make something unique.

    I also think I understand that either way, this is a difficult issue. Construct 2 needs to be accessible for the beginner (I use it to teach 3rd graders how to program). But it would make sense to offer more expert options.

    But ultimately construct is your project and not mine and I am glad you made it!

  • newt - I think that is what is kindof being hinted at. You can't make one behavior fit every need. There are a few platformer behaviors in unity that, rather than being one behavior they are a multitude of behaviors. You add a single manager behavior that coordinates the sub behaviors. Things like wall run, and jump, can then be added. Duck, slide, roll, jump, climb ladder, drop through, get surface angle, run, and so on are then added to the object. Each has its own parameters and what not.

    The basic manager only has stuff like collision detection (no resolution) and keeps track of state and whatnot. In a way, when you extend the platform behavior via events, you are doing much the same thing. The problem is is that the basic platformer already does more than it should and can't have things turned off. It is also missing some low level features that enable much more advanced derivatives of it (like being able to chose how collision response works, being able to ray trace, and so on)

  • I think it's more like...leave behaviors alone and give us more options to make what we need when we need it, using events. What Newt said is actually how Stencyl works lol.

  • newt - I think that is what is kindof being hinted at. You can't make one behavior fit every need. There are a few platformer behaviors in unity that, rather than being one behavior they are a multitude of behaviors. You add a single manager behavior that coordinates the sub behaviors. Things like wall run, and jump, can then be added. Duck, slide, roll, jump, climb ladder, drop through, get surface angle, run, and so on are then added to the object. Each has its own parameters and what not.

    This is what's being proposed with modularity - which I'm excited for, but a bit worried that it seems to not be a launch feature of C3.

  • I don't really get this talk about all these behaviour limitations? If my project needs something and a behaviour can be used then I use it. If there is no behaviour that suits my needs I make my own logic with the event system. What is the problem?

    I don't think anyone was getting at behaviors as being a problem. It is the weakness of the event system in creating extensible, manageable, abstract systems to be used in multiple projects.

    If you need raycasting you can make your own with the event system. If the platform behaviour doesn't work for you, then make your own or tweak it.

    Ya, I think several of us did that. But events are a dumb way to go about creating raycasting. It is already a cpu hog and running it through events would be sort of short sighted. Programing behaviors is not as fast in construct as it is in unity. Because the end path in construct for an advanced developer usually involves creating their own plugins and behaviors it makes sense to be somewhere else as Colludium said. You have lost the advantages of construct at that point.

    People seems to think that you are limited to only use the behaviours for the whole game. I only use a few and mostly do my own with events and functions that can be reused. I also work in Unity and Unreal Engine and you can download behaviours there as well but just like in C2 they might not suit your project and you simply make your own. So stop thinking that behaviours is a limitation. It's just a tool you can use if they suit your needs. I'm not saying that C2 doesn't have limitations. I'm just saying that behaviours isn't a limitation.

    I couldn't agree more. But the limitations of event system don't make some extensions economically plausible if time is a resource... back to the sdk!

    Saying that you can't make a Super Mario clone in C2 is not true. It is actually pretty easy to make with behaviours and custom events and if you know what you're doing you would be able to make an exact clone of mario in no time compared to other engines like unity.

    Go back and read the comment that was made in this regard. It wasn't that you CAN'T make mario in c2, it was that you can't make a mario clone using the platform behavior. Making an entire system to handle and resolve collisions, provide the backbone to all platforming characters (mario, goomba, etc), and so on, is an endeavor best attempted via the sdk in construct: not the event system. I know. I have made a framework to handle the above in c2 events and in code, and I can assure you I know how, I know what I am doing, and I speak from experience. Unity provides a better environment for coding and would be a better place to be if your development is code centric. Which given the above, probably should be if you don't like wasting time. I also am going to make the claim that you may know what your doing in construct but you don't in unity if you think you can event script a basic system like collision detection in construct faster than in unity. In the end, the coded system will also be better, as code allows for scope, among other more important things.

    Just to put things in perspective, I have given the code to fix several bugs in the box2d physics system, which I have read the entirety of and understand. I have made my own box2d behavior that includes several missing features in the vanilla behavior. I have created several of my own retro collision detection systems, and reverse engineered mario 3 collision basics using frame by frame analysts. I have taught children's classes on programing, ... blah blah blah... obviously this is the internet

    "If you knew what you were doing..." ... You could make the cone mario in code much faster than in c2 events. Also, on a trivial note, Mario's position can only be stored and changed by a minimum of 1/4 pixels. This is important if you want to make an "exact" clone.

    I think this remake of Donkey Kong by Ribis in C2 is alot more complicated than a simple mario game and it shows what you can do by combining behaviours with custom events.

    Subscribe to Construct videos now

    I never played DKC so I can't readily compare this clone for specidic details. This is an awesome example of what can be achieved using c2, but nowhere could I find the author stating he didn't use the sdk to help him make this.

    You may be surprised to know, but there isn't really anything going on in DKC that makes it significantly complicated than mario 3, at a core level. I am making this claim based on only what I can see in the demo. Sure the snes could handle more x,y, and z, but the basics concepts of how x, y and z are handled and resolved didn't change much from the nes to the snes.

    So people who are saying that you can't make unique games with C2 are just not experienced enough. If you think outside the box and stop relying on behaviours and use the power of the event system instead you can create almost anything.

    Uh... I don't recall anyone saying you can't make a game in construct. And I also think that that Tokinsom amongst others simply stated the problems with using a behavior to get the results you want. Obviously they understand you can't simply use behaviors and expect unique results.

    "Almost anything" I am sure doesn't include the missing features of physics behavior, projection angles, or how about this: your own broad and narrow phase collision detection algorithms. Ya, you know why, because you would be crazy to attempt to write that in events. You have to code, because it is more reasonable.

    And many people say that C2 isn't capable of making big hit games because there are so few good C2 games on the market. The truth is in fact that C2 attracts people without experience and most games released are to be honest pretty bad and the overall quality is really low. But the engine itself is capable of doing almost anything if you use it the right way but as any other engine it has its strengths and its weaknesses.

    Did anyone even mention this on this forum yet? But you are right. C2 can make amazing stuff, if you use it right. Using it right, at a low level, involves programing <img src="{SMILIES_PATH}/icon_e_smile.gif" alt=":)" title="Smile">

Jump to:
Active Users
There are 1 visitors browsing this topic (0 users and 1 guests)