Ruskul's Forum Posts

  • 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.

  • 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?

  • GenkiGenga - The problem with trying to create reusable events now is that it takes a long time. Not to make the events, but to get them copied into a new project. I use stub projects where whne I get a particular framework where I want it, I then strip it of its specifics and save it as a template. But inevitably I find I am always reinventing the event sheet wheel in multiple projects. and that gets annoying.

    Similarly , I am not trying to be antagonistic, but If you haven't found the behaviors to be lacking, then you haven't pushed them very far. Or, you have pushed them with the greatest flexibility of expectations. I know I don't compromise, and being able to do so is important when you use other peoples code. However One post up from yours, I make the claim that you can't make mario with the platform and solid behaviors.

    I don't want more behaviors though. I want better ways of making my own. And I would very much poo poo using events to recreate marios platform behavior and collision resolution. It's more efficient to code it in light of events being very much tied to the original project.

    On a final note: I love the events. I love the visual nature of it, but in the oop department, extensibility department, and scalability department., it is hard to beat code, atm

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • group variables! I often organize an objects variables by creating multiple objects and putting them in a container, but this gets messy with families. Having a hundred variables on an object is also messy. It would be much better to be able to create a predefined group of variables that can then be added whole sale to an object. Much like a structure.

    Example: tired of always adding ceartain variables to objects...

    Instance variable group "Velocities" = {

    x as number

    y as number

    lastx as number

    lasty as number

    };

    Once defined, this group could be added to any object in any project. It could be accesses in expressions via someobject.Velocities.lastx.

    Also, one could create functions and attach them to objects in the same way. the contents of the function would be an event sheet where the object reference self would always point to the object calling the function

    And instance function "SaveLastPosition" = {

    self.velocities.lasty = self.velocities.y

    }

  • > I heard that you can now copy a single tile in the tile map work area. How is this done. Also, why can't you copy an entire area like you can from the tilemap palette. Also, is there a way to copy and move sections of the tilemap? ... -.-

    >

    1. It's shift + click (or + right-click, not sure)

    2. That will be available soon (hopefully very soon)

    3. No

    Was Ashley planning 3? I thought that was seen as fairly necessary and basic. I mean why bother with the ability to edit a tile map at all if it is missing basic features.

  • You can use the program Tiled, it is much more comfortable.

    yes but I feel the development workflow is quite bad and doesn't allow fast level editing when designing "tight" levels.

    I will have to give it a go again though, as it seems the "less favorable work flow" will be faster in the long run.

  • Do you get any errors or whatever?

    So, it seems, if you change the properties of a behavior after creating a file that saved those properties, construct doesn't know what to do with the save data.

    For example, If I create a new behavior and I leave in the this.myproperty that comes with the same behavior and then take it out later, the save file has a place for that property. When trying to load it it doesn't know how to interpret it.

    I think.

    I should think if it loaded an unknown property it should discard it at the request of the user. Idk... I havn't tried editing the xml file to correct yet, mostly becuase I am lazy and found it a good opportunity to restructure and rebuild those projects anyway

  • > Unfortunately, much of the way contruct operates makes assumptions about what the game dev needs. I find those assumptions to be uninspiring and somewhat limiting.

    >

    Can you elaborate on what those things are? We've always designed C2 to be a general-purpose game engine and avoided any "cookie cutter game" type features where you're forced in to one style of gameplay. The built-in behaviors are all designed to be customisable and flexible for different purposes, at least to some extent, and if they don't work for you there's always the option of custom logic via events.

    Tokinsom already got to most of what I would say.

    The prebuilt behaviors are great for speed and prototyping. But they really aren't that general purpose though. You can't make a mario game with the platformer and solid behavior. It is impossible... unless the platformer behavior is only for the goomba . You can make an approximation, but specifically you have made a construct 2 platformer game, not mario. At any level of analysis this is painfully obvious. This is rooted in the way the behavior handles and resolves collisions. If you want a custom movement option, the custom movement behavior still only lends itself so far before the limits of the system become obvious. You can only make specific kinds of custom behaviors with it.

    Those behaviors are non flexible and only as general purpose as the creator could envision them being used for (And I would never expect you to be able to envision every use case). But at a core level, I can't edit the way they work because they have been tied to the c2 black box. The assumption made in the behaviors is that they are good enough. You don't need to do any low level work, and anything can be achieved as is. But that's wrong. Using the behaviors... You can't create parallel worlds like that one game where you can jump to the background. You can't create n+ because you can't get surface normals and projections. You can't create mario because it uses an entirely different way of detecting and resolving collisions. you can't create sonic for much the same reason as mario. You can't create dustforce because you need raycasting and collision normals. The list goes on. You could make these games using events but that would be a royal pain in the ass in the event sheet (I know, I recreated tile based collision detection with 4 resolution types and 12 different slope angles as well as halftiles.... just for fun and tied it to behaviors that ran point based collision resolution). But since I can't save the events as a more abstract behavior, it really is a waste of time, and the lack of true OOP makes event scripting something like that even harder. And it's less efficient. So, the end result is that I create behaviors, and plugins... that need to talk to each other. You never designed behaviors and plugins to have to talk to each other and told us not to make them like that, but even the way you use solid and platform and platformer is breaking your own rules... you just are able to do it better because you can integrate it with the engine, which the rest of us can't. There are no solid groups for collision filtering, push out nearest doesn't work as well as it should, there are no projections or contact points provided, there is no end collision and so on. Solid collision resolutions also have some built in constants (why aren't those exposed as properties?)...

    Does this all make sense? And Ive only touched on platformer stuffs... There are many of the other behaviors yet to talk about. I have never outright said it but, physics sucks in construct. It isn't even adequate. Not only that, there are not but a few people using construct capable of changing what physics can offer. Unless you are making a very basic physics game, physics is worthless. But that's my whole point! You can't make anything beyond simple basic things with the behaviors reasonably.

    So, in the end I code... usually in an environment tailored to it, because that makes the most sense. The end path of construct as I see it is coding, but it isn't as easy to get into coding for construct as say, unity. Which means ultimately, Unity actually is easier

    Don't get me wrong, I like construct. I would still buy it again. But it is a prototyping tool for me and an instrument to teach/introduce kids to programing. I stick with it because I am visual and it is easy to see and interprete events for me. Once I got my own library of plugins and behaviors made, things can be swell in construct.

    (btw) every time I write a long post like this construct logs me out and doesn't save it... super annoying. I have to copy my response every so often to ovoid losing my work.

  • Ethan - it makes sense in a way. The further one tries to go down a one path fits all super easy mode, the more you get sloppy lose fitting results or have to squeeze something in a way it wasn't intended to be squeezed. The focus on ease of use at the exclusion of features that would benefit the "advanced" crowd seems a bit myopic. Of course, in the end, the amount of work to actually write a plugin and hook it up to construct depends on how many ACEs you need available to construct (which is easier than codding for mmf so I hear). What makes it hard is the fact that getting objects to interact is much easier in events than through behaviors (meaning you usually need alot of ACEs). The fact that Ashley actually integrated attribute behaviors (like solid and such) into the core engine demonstrates there needs to be a better interface for getting plugins/behaviors interacting.... but I'm getting a bit onto another subject here lol

  • Hello,

    For whatever reason construct 2 won't open my save files. I never have had this problem before. I am of course using some custom behaviors, and I found the one responsible, but I can't figure out why it causes this. It has made it impossible to open my projects. I can create a new file, add the behavior, and no matter what I do it can't be opened the next time I load it.

    I have scoured the behavior for anything out of place, but why should a behavior affect a c2 save file? Any help would be appreciated.

  • Dito on the above post. But I would add that It takes alot longer to get comfy with unity, but it is more powerful. by a long shot. And to be honest it is more flexible too, but you have to know how to code. You have to understand that what makes construct "easier" is that some of the things needed in a 2d game are already taken care of. But if you are in the habit of writing all your own plugins and behaviors anyway... unity is far better, and is much more extensable than construct. Contruct was made to be fast and easy to make games for those who can't or won't code. Unfortunately, much of the way contruct operates makes assumptions about what the game dev needs. I find those assumptions to be uninspiring and somewhat limiting. Based on a number of conversations with ashley, I feel construct is developed with the lowest common denominator in mind. And for something that is supposed to be easy for all, that makes sense. But it makes it hard to make unique, innovative games in the best of circumstances /:

    My main project is in unity, my prototypes are in construct.

  • Kyatric - It stopped crashing after the first day of download. I just wanted to see if others were having problems and if there were known issues with the release.

  • bladedpenguin - I think we are of similar dispositions then. I remember at one point being smitten with constructs speed. I was blazing through prototypes. Then when the time came to actually fix bugs, polish, and begin the actual game... I quickly realized, if you want it your way, there is no substitute for coding it yourself. One year ago, I thought I was a few months from release for a wii-u game... ... ... Well, nothing like telling people your almost done and then finally admitting to yourself that you've barely begun

    I like coding though... It just gets old after programing for a month straight on frame work and other stuff you can't readily see the progress in. Prototypes are fun to make. The actual game... sigh...

  • Ashley , well , that all makes sense. In a way, it's cool that it is uniquely a construct 2 problem, it makes you a pioneer (:

    I want to compile a list of all the forum topics you have entered and given particularly good insight into why something is the way it is with construct. A lot of your posts are pretty much manual worthy, needing to be summed up in a question/answer format.

    Just out of curiosity, is there going to be a c3 feature that allows us to make instance functions? Kind of how you would in programing when you make a class and have methods. It would be useful to have a bit more oop in construct, though sometimes, I realize a coding background can make me not see some obvious c2 unique solutions.

  • zenox98 - It is about that simple.... I open construct, I select open file, and poof, construct is no longer working. It closes it self quite quickly, no lag, or other program crashing problems. I reopen it and it works. It happened in quick succession on several files. I haven't had a problem since. I was also able to open those files with no problem right afterwards.