calebbennetts's Forum Posts

  • Hey, there! I'm working on "Phil Inphestation," a "guide-the-goons" puzzler in the vein of classics like "Star Wars Pit Droids." This started as a VimJam4 submission called "Send in the Bots."

  • Sure, you can use it for educational purposes (or to educate porpoises, if you can find a way).

    So, the way I have it set up, the first statistic will be on the right, just below center, and they go clockwise from there in the same order as in the array.

    The best general advice I can give for your game dev journey is to get good with trig. SOH-CAH-TOA, cartesian and polar coordinates, distance and angle formulas. It has a thousand and one uses.

  • You'll probably want to look at the Drawing Canvas.

    Add a polygon point for each stat, then draw the polygon.

    If you're doing the classic circular shape, you'll need some trig to find the points.

    I've put together a demo project:

    construct.net/en/free-online-games/statistics-polygon-51933/play

  • Thanks, plazatin. I was half afraid someone was going to say scripting, but sounds like that's the way to go, and now I'm finally out of excuses not to jump in. I'll update when I get it working.

    EDIT:

    My. Gosh. That's so flippin' easy! There's predictive text and color coding and everything. I should have tried this forever ago!

    Thanks again, plazatin. If Bennetts Skunkworks Project B ever goes public, you get a mention in the credits.

  • Hi, everybody!

    I've played around a little with the (built-in) HTML Element, and it's absolutely the best way to handle UIs and menus in Construct. You can make logical layouts, position and format elements with ease, and intuitively read out variables as they change.

    But.

    I can't figure out how you're supposed to take input FROM elements and feed them TO the game logic. For example, say you have an element representing a sound menu, and a few lines in is a volume slider. When a user moves the slider, it should change a "volume" global variable.

    I keep thinking there should be a "get attribute" expression, where you specify the attribute and selector to get back the value as a string. (Imagine the inverse of the "set attribute" action.) The best I've been able to do so far is having a separate form object and setting it focused when a particular HTML ID is clicked, but that's too janky for anything but internal tools.

    Does anybody know if this is possible right now, and if so, how it's supposed to work?

    Thanks ahead of time!

    Caleb

    Tagged:

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • Could we get timeline functionality on the 3D Camera? It'd be cool to basically set it on a track and just watch it go. Current workaround would be positioning it to a moving sprite with events, but "look at" and "up vector" info is still tricky.

  • You can give your box the "Pin" behavior (instead of "Platform") and check for overlap with an image point to the side of the player. Here's something I put together (sorry I couldn't figure out how to embed the images):

    https://drive.google.com/file/d/10R_eE47JtR4iys-JxjUCgdD2KCuzq63O/view?usp=sharing

    https://drive.google.com/open?id=1_u8-FKycFhlNyVZvEKQErLvv3JbVInqI

    The first link shows the object properties, including a custom collision box for the ... box... and the new image point for the player. The second link is the event sheet.

    I did notice some jitters if I have pixel rounding turned on or if the player has too high of a "pushing" movement speed. In the second case, I think the solid behavior is slowing down the player before the box moves from the pin behavior.

  • The long answer is you SORT OF can, but it might not be worth it, anyway.

    You could put all your events in a group, then add an event outside the group to toggle the group active every tick.

    But the behaviors will still run as if it were 60fps, which could cause a lot of unwanted results. You could add events that set movement-related behaviors enabled or not enabled every other tick, and if you double all your behavior variables (max speed, acceleration, etc.), it will be almost the same as a game running at 30fps.

    Even then, though, you could have some unintended consequences. This method essentially makes the behaviors act as if the "off" tick takes as long as the "on" tick, and if that's not true, you could have problems.

    Finally, all this only affects your game logic. Graphics will still redraw at 60fps, unless you're doing event-controlled rendering, like with R0j0hound's Paster plugin.

    The only real reason to make a 30fps game is to save computer resources, and trying to get 30fps in Construct 2 probably won't save much processing power. Construct 2 will always try to run at 60fps, so unless you put in a lot of planning, you'll have one tick of next to nothing happening, followed by one tick of the entire event sheet trying to run. With the movement timing problems that are also likely to occur, getting 30fps in Construct 2 is probably more trouble than it's worth.

  • I have some tips for controls with the physics behavior. I would suggest using the actions "apply force at angle" and "apply impulse at angle" for your controls

    So, for example, an acceleration would be

    "apply physics force 10 at player.angle"

    Deceleration would be

    "apply physics force 10 at player.angle+180"

    Jumping would be

    "apply physics impulse 2 at player.angle + 270"

    And to see if your player is on the ground (useful for jumping that makes sense), you could use the pin behavior to pin a slightly larger sprite over your player sprite (position and angle), then check if that larger sprite is overlapping the object you use for the ground.

  • If you want the edge of the sprite to align with the edge of the layout, you have to take into account the sprite's origin (also called "image point 0"). You could:

    a) move the sprite's origin to the right side of the image, then use the event "sprite -> set x = layoutwidth"

    b) leave the sprite's origin in the center of the image and use the event "sprite -> set x = layoutwidth - self.width/2"

  • That's not an easy question to answer. One way is to give the spring an instance variable with how fast it should launch Sonic (for example, "launchSpeed"). Then if you're using the Platform behavior, you can set Sonic's Vector Y to "launchSpeed*sin(spring.angle)" and his Vector X to "LaunchSpeed*cos(spring.angle)" (you might have to play with minus signs to get those equations right).

    If you use this method, it will be important to set Sonic's deceleration relatively low so you can really see him move at an angle. Also, you will need to shape the spring's hitbox a special way or find some other method so the spring only triggers when Sonic hits the top and not the bottom or sides.

    But overall, making a Sonic engine on C2 isn't very easy. There's one somewhere in the forums that works well, but if it were easier, I'm sure we would see tons of Sonic or Sonic-like games on the arcades. That said, don't let my nay-saying stop you.

  • You can always download the free edition and upgrade later.

  • But also check that he's still on a floor, too, or he'll die any time he jumps too high and hits a ceiling.

  • You could try "On start of layout" -> "Set minimum framerate to 60." That will make the game slow down instead of dropping frames. The problem is probably with optimization, though. If you want to keep your framerate high, you need to run your game as efficiently as possible.

    Also, certain framerate issues are a peculiarity of C2 (it's still a great engine, though). You might find this section of the manual useful: https://www.scirra.com/manual/134/performance-tips

    February 1 rolls around. 1 blurry screenshot. That's the evilest thing I can think of.