oosyrag's Forum Posts

  • Have you completed the multiplayer tutorials? For a turn based game you probably won't need the 4th part, but it's a good idea to go through it anyways.

    If you have a specific question I'd be happy to help... But you'd need have a question to ask first.

    One way to assign turn orders is to simply use the same order clients connected to the room.

  • I have no idea what you mean by that, but as it is now since it is taking inputs from the accelerometer, it will definitely be affected by shaking as well.

  • Do you have your basic controller movement set up?

    You'll add to that with an event that adjusts the 8direction maximum speed, proportional to the distance your stick is from the center.

    To get the distance from center, you want sqrt(gamepad.axis(gamepad,indexX)^2,gamepad.axis(gamepad,indexY)^2)

    indexX and indexY are the numbers of the x and y axes of the gamepad respectively, I'm guessing 0 and 1 but I'm not sure.

    Divide that by 100 to get a value between 0 and 1, and use the resulting number to limit your maximum speed proportionally with the lerp expression so...

    Every tick set sprite 8direction max speed to lerp(0,definedmaxspeed, (sqrt(gamepad.axis(gamepad,indexX)^2,gamepad.axis(gamepad,indexY)^2))/100)

    definedmaxspeed is your maximum speed in a single direction. Note that diagonals will exceed this speed. There's probably a better way around this but I can't think of it at the moment.

    Now there's going to be a problem where the maximum speed is set to 0 immediately after releasing the stick, which will stop your character right away and I'm assuming that would be undesirable.

    So instead, you would set the maximum speed to the higher of the two values between current speed and stick speed limit by using the max(a,b) expression. Resulting in...

    max(sprite.8direction.speed,lerp(0,definedmaxspeed, (sqrt(gamepad.axis(gamepad,indexX)^2,gamepad.axis(gamepad,indexY)^2))/100)

    Unfortunately I don't have a gamepad to test with so I'm almost certain I made a mistake in there or overlooked something, so that's why I wrote out the thought process. Let me know how it goes.

  • Touch.AccelerationXWithG-1

    should be

    Touch.AccelerationXWithG * (-1)

    If you want things to move faster, simply apply a multiplier of your choice to the touch.acceleration values.

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • that is what I was trying to do actually. Can I see somewhere the status of the variable?

    f

    If you mean to display a global variable, make a text object and use the set text action to the variable's name.

    Saving to local storage is generally not necessary, as global variables do not reset when changing layouts by default.

  • Request motion permission with touch object. Must be user triggered.

    Disable gravity, obstacles set to immovable, in physics objects on start of layout.

    -> Sprite: Apply Physics force (Touch.AccelerationXWithG×-1, Touch.AccelerationYWithG) at image point 0

    You probably also want to turn on bullet mode or adjust the stepping values for the sprite so it doesn't get stuck in or teleport through walls.

  • On enemy created

    Increment player instance variable "bonus target" by 1

    On enemy destroyed

    Add 1 to player instance variable "bonus counter"

    If "bonus counter" = "bonus target", spawn bonus.

    You'll need some way to differentiate groups and time out the bonus. I'd use an invisible helper sprite per enemy group. Each enemy can store the helper sprite's uid on creation to keep track of which group it belongs to. You can use this helper object instead of the player object to store instance variables as well.

  • If you lack knowledge, you could always learn - there are plentiful resources online. The built in multiplayer requires learning as well if you are not very familiar with it. If you're making something with any significant concurrent user count, it is highly recommended to utilize a suitable back end service that can handle it like Colyseus. Photon seems to be a popular choice as well.

    If you're set on using the multiplayer plugin, it does have the ability to run a central dedicated host by simply distributing clients that can only join as peers, while you run and manage the copy that runs as a host on a server of your choice.

    Again, developing a multiplayer game in general, with or without the plugin, will take significant effort and research. It can be beneficial to learn how to use the most suitable tools from the start, given that you'll need to study regardless.

  • I can agree that the ability to reposition the vanishing point would be quite a nice property to have, that doesn't seem like it would be difficult to implement afaik. If not a user designated vanishing point by coordinate, which could cause some issues if not careful, perhaps one where you can chose viewport corner/edge/center would be simpler and safer to use.

  • Thanks for the reply, seems simple enough. I see where to find the array interface in the scripting documentation now too, I guess I just wasn't familiar enough with that section of the manual.

    I also tried putting it together using the JSON object with -> JSON: Push back "{x:"&array.at(loopindex,0)&",y:"array.at(loopindex,1)&"}", but that resulted in each element being enclosed in double quotes, which I guess indicates a string rather than two separate json objects in that array cell. I could strip them out in the resulting json output with a replace, but that felt pretty clunky and wrong.

    About the BBcode property... ugh. Thanks. Figured the data was fine but it was driving me nuts why it wouldn't display.

  • If you don't understand, then you should start from the beginning of the tutorial.

    construct.net/en/tutorials/beginners-guide-construct-1

  • > I think I read somewhere that you can't turn off font smoothing for text objects. Is there a reason you can't use the spritefont?

    I could use it. However I have the intention of translating the game to other languages in the future (russian, mandarin etc) and it would make things more complicated.

    My last shot will be applying some sharpness to the text object and see the results, if it doesn't work I guess I'll use sprite fonts.

    Just wanted to chime in as a Chinese user and say the lack of spritefonts is pretty much a given for a non-alphabet based language, and non anti-aliased Chinese characters to be blunt are quite ugly. The only real reason to use them would be if you make your text really itty bitty, which is probably a bad idea to begin with.

    From a usability standpoint, you're probably overthinking it. If you don't put aliased and anti-aliased text directly next to each other for an end user to see the difference, the average person won't notice at all, unless it makes it hard to read (in which case you could simply make it larger). Brains are wired to smooth things over by default. Even then, either way it is decidedly not going to change the impression of how fun your game is to play.

    Also some general advice for international support, whenever possible you should focus on avoiding text completely by designing around symbols that can be universally understood to begin with. Bad translations/localizations are the source of much derision and amusement among my friends in the games we play at least. Of course this won't work if your game relies heavily on text, but just leaving this here for discussion anyway.

  • To make a sprite move in a random direction, give it the bullet behavior and set the bullet angle of motion to random(360).

    If you're building an ai for a battle royale... You're going to need a more detailed plan of how you want your ai to behave and the rules and constraints they need to follow.

  • The first thing that comes to mind is to use an array. For each object that has that timer running, push timer.duration-timer.currenttime, and the object's uid into an array. Sort the array to get his of the object with the lowest duration remaining.

    If they all had the same duration to begin with you can just push and remove the object uid directly into an array, first in first out.

    Or are they all on the same object? If you elaborated on your set up and how you are using the timers there may be better approaches. For finer control over timers you would normally use different tags.

    EDIT: Below is a better idea.