tanoshimi's Forum Posts

  • Set the origin point to be the same in both frames.

  • Posting your .capx here might be a good start... :)

  • Dammit - blackhornet just posted before me!

    Change the line <saved-with-version>11900</saved-with-version> in the .caproj file and it should open fine.

  • I've not used the "video" plugin, but I've embedded videos by using the HTML_Div_Pode plugin and then just adding a <video> tag in the innerHTML, referencing a video file in the project. Works great for me, whether exported to web or Node-Webkit.

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • I'm presenting a session on Game A.I. at a Norfolk Indie Game Developers meetup next week.

    Rather than use Powerpoint, I'm using Construct2 to create my slide deck - with each slide being a separate layout within a single project. That way, I have interactive demos for each topic directly on each slide, rather than flick back and forth between slides and demos (I've seen plenty of demos where presenters spend ages Alt+Tabbing between different applications...).

    It also means I can publish the entire presentation and all demo material on the internet after the event as an interactive website.

  • Facing direction and direction of movement are not always the same (consider "strafing", where a player moves sideways relative to the direction they are facing).

    However, most of the built-in movement behaviours by default change the facing angle to match the angle of movement. Therefore, unless you've changed it to be otherwise, badguy.angle will be equal to the angle at which they last moved (even if they are currently stationary).

  • Yes, you can certainly couple C2 with SQL Server, by using Construct's AJAX object to make a request to a server-side script (e.g. a .NET .ashx handler) that calls a stored procedure in the database. I've done this to create a multiplayer "simcity"-style game in a shared world, but never an MMORPG.

    Whether this is a good design for your game or not really depends on the requirements of your project. SQL Server is a relational database, just like any other (Postgres, MySQL, Oracle, DB2...). It's good for storing and accessing large amounts of data (think gigabytes at the minimum), but it's not going to be as efficient as an in-memory or local storage option if you're just storing a small amount of data.

    If you're going to be loading level/terrain data in discrete stages (e.g. retrieve the current location of items/characters from the database when the game first loads, or when the player enters a new area, and write back to the database only occasionally when they change) then this would work well. However, it would not be so efficient if you want to send continuous packets of data to and from the server representing each character's actions in real-time.

    As others have mentioned, there are a lot of complex issues in MMORPG design, and a lot of clever workarounds required to keep the world synchronised between players. If this is your first project, I'd seriously recommend you scale down your aspirations to start with - perhaps just create a 2-player game in which the world is synchronised via a central server - and then work up to something like this. Good luck!

  • Use the Within Angle condition. I.e. if player is within 45 degrees of self.angle

  • I'd agree that *animation* is isometric games certainly involves more work, because you'll have to render frames for each facing direction, but that's nothing to do with pathfinding!

    If you want to disallow diagonal paths in the route returned by the pathfinding plugin then you need to delete/comment out the diagonal cells added to the openlist in lls 380 and 402 of pathfind.js, so that you only have the following:

    if (!obsLeft)

    this.addCellToOpenList(x - 1, y, 10);

    if (!obsTop)

    this.addCellToOpenList(x, y - 1, 10);

    if (!obsRight)

    this.addCellToOpenList(x + 1, y, 10);

    if (!obsBottom)

    this.addCellToOpenList(x, y + 1, 10);

    // Diagonal cells commented out as follows

    //if (!obsLeft && !obsTop)

    // this.addCellToOpenList(x - 1, y - 1, 14);

    //if (!obsTop && !obsRight)

    // this.addCellToOpenList(x + 1, y - 1, 14);

    //if (!obsRight && !obsBottom)

    // this.addCellToOpenList(x + 1, y + 1, 14);

    //if (!obsBottom && !obsLeft)

    // this.addCellToOpenList(x - 1, y + 1, 14);

    Don't know how that fits with the general policy of "not editing the core plugins" though...!

  • Here's one approach - create three instance variables, to record the start waypoint, end waypoint, and current waypoint of each enemy.

    Then just set each enemy to head towards their current waypoint. When they reach it, increment their current waypoint by 1. If that is their maximum waypoint, reset the marker back to their first waypoint again.

    <img src="http://i49.tinypic.com/2vadr1l.jpg" border="0">

    EXAMPLE CAPX

  • I don't see why you can't use it for isometric games - you just need to manually set the collision map, as isometric graphics collision != object collision

  • How about?

    <img src="http://i47.tinypic.com/21bjbz4.jpg" border="0" />

  • My guess is it's because of your use of "trigger once" conditions.

    As I see it, when the first blue minion gets to the first tower, he triggers the "On pathfinding arrived, bluepathfinder=1" condition, and increments his own bluepathfinder variable to 2.

    He then matches the following condition, "Bluepathfinder=2, trigger once", and sets about finding a path to the second tower.

    However, when any subsequent blue minions arrive at the first tower, they increment their own bluepathfinder variable to 2, but never fire the second action to plot a path to the second tower, because it's already been triggered once (by the first minion to get there).

  • vee41 - that is exactly what I was looking for, thankyou!

    I didn't see "Pick All" because I was looking in the Object conditions (where you find Pick by ID, Pick Nearest/Furthest etc.) rather than in System conditions.

    In fact, it it only me that finds it a bit counter-intuitive that you have to Pick All in "System" and then select the object type that you want to pick all of, rather than going via the object itself? Anyway, it works, so thanks again.

  • I'm having fun prototyping some group AI behaviours. However, as a Construct newbie, I'd really appreciate a bit of advice with regards to the picking process.

    I have a number of autonomous enemy agents that maintain their own state based on individual factors like:

    • Distance(Player.X, Player.Y, Enemy.X, Enemy.Y) > 50 --> Enemy Set Safety to "Moderate"
    • Enemy Health < 10 --> Enemy Set Action to "Search for Medikit"

    But now I want to add some state transitions for individual enemies based on assessment of all enemy instances, not just themselves.

    For example, suppose that I wanted to implement the rule that "If more than 80% of the blue team have less than 30 health, then all blue players should run away". If I try to implement this as:

    <img src="http://i46.tinypic.com/2a7s8eq.jpg" border="0" />

    Then my problem is that the evade state only gets applied to the picked instances - i.e. those with less than 30 health. How do I create an event that compares the number of instances that would be picked by an expression (how many blue players have <30 health, are "fleeing", or have less than 5 bullets left, for example), but then apply the corresponding action to all instances of that object?

    Any help gratefully appreciated!