Sethmaster's Forum Posts

  • Mid May Devlog

    I just finished a significant part of the graphical overhaul and there is still more work to be done.

    Regarding the character sprites, since my audiobro prefer realistic proportion rather than the cutesy type (TO and FFTA2), I decided to use back my OC design with significant improvements. Legs are thicker. Necks shorter. Animations are improved to give the characters a bit more jazz and gaiety.

    I am still bitter about losing two weeks’ worth of hellish work just to go back to my own design in the end though. A hard lesson to have.

    One more new mechanic that is added into the game is the alignment mechanic.

    Everyone who has played any D&D game before knows a bit about it. To put it simply, alignment is basically indication of how a person who react and behave towards others and situations he is in. Will he be a nice person and be an incredible dick? Obedient or a free thinker?

    In the game, alignments will affect how relationship between characters in your party progress. Characters with similar alignment will like each other while those with opposite outlooks toward life will grow to hate each other.

    Moreover, it also affects how characters react to your various decisions in the game, for good or ill.

    Naturally, alignment will also operate as gatekeeper to various advanced techniques and classes in the game.

    A gif of the new shopping UI.

    A gif of the new character model walking like an idiot.

    Several images of the new battlefield placement UI.

  • Try Construct 3

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

    Try Now Construct 3 users don't see these ads
  • Sethmaster - No I don't get the lag problem. That only happens when I have both objects in the preloader and the main layout. Besides, I don't use events to destroy preloader objects, I use DestroyOutsideLayout Behavior which is fast enough to destroy objects than events. Also, what I am experiencing is a short amount of invisibility of spriter objects when they are spawned on gameplay and not initially present in the main layout on startup (but they are present in the preloader). The reason here as I said above must be because of mobile limitations + javascript garbage collection that objects not present in the next layout will be flushed (so the preloader losses it's purpose). So the result is that there is a short moment of invisibility of the spriter objects. In my case, these are the bullets spriter objects. And Bullets that are invisible on first launch is kind of weird. So I am open for suggestions, thanks in advance.

    As I said in my previous post, just create those spriter sprites first at the startup of any layout that will use them outside of the viewport (use negative coordinates). On creation, disable the DestroyOutsideLayout behavior for those instances only.

    Then delete it soon afterward.

  • OP, because function parameters only lasted for the tick that the function is called.

    It is removed on the next tick.

    If you want to use it outside of that, save the parameters into dictionary keys/variables or as rexrainbow said, save it into an array.

  • No experience for using Spriter in mobile implementations since I never aimed for that but you can try creating one dummy for each spriter object you plan to use on the start of the layout outside of the layout (use negatives position) and deleting them shortly afterward (use 0.1 second of 8 ticks delay).

    Then create the sprites you actually want to use afterward with none of the lag or problem.

    No difference from preloading it using another layout.

  • It should since I have been using it as such for quite a while and have no issue whatsoever.

    If you don't want redundancy, simply create a layout with the scml sprites with its own event sheet for the initialization events and include the event sheet in every event sheet that you plan to use the sprites in, including the preloading layout/event sheet.

  • Did you include the scml event sheets both into the preloader and the main sheets where you want to use the spriter sprites? The code are necessary to be included in every event sheets they are used, it's not optional.

  • Wow, this is a very impressive project. I tried to make a similar project (isometric tower defense with RPG elements) but I ran into a lot of roadblocks like managing scrolling windows, keeping focus on the mouse so under-window elements aren't clicked, etc. I'm curious as to how you tackled these issues.

    Repeated trial and error. You can't escape that when making anything.

    And repeated code review to improve the entire user experience.

  • Why don't you use a word document or an excel sheet to keep track of the variables and their usage in each event sheets?

    Because that's what I do to avoid overlap and mishandling and to avoid bugging out features when doing maintenance on event sheets .

    It's not hard and take hardly a minute every hour of development.

    Because even if you know what variables have already been created, it would be quite difficult for you to remember where are all of them used and how.

    Best to just jot those down. Easier for maintenance and bug removal.

  • ?

    Just use a combination of local variables and functions?

    Also use the comment functionality of C2 to keep track of what's what.

  • I agree with Silverforce

  • OP.

    All objects in Construct 2 need one tick before you can call them outside of their own private subevents after creation.

    This is well documented in the official guide which I recommended you to glance through at least once.

    I saw your capx and you could just wait 1 tick.

    If you don't want them to be seen before elimination, just set all of them as invisible on creation and only make the remainders visible after removal is done.

  • Each for loop runs in the same time, it won't wait for one to finish before starting another.

    Perhaps for after startup which I haven't try out.

    But for the rest of the time, my experience is that for loops, they run based on the order from top to down.

  • Everything is going pretty slow as the game is currently undergoing a large scale graphic overhaul.

    The native resolution of the game is currently going from 480x270 to 640x320.

    The intent behind the move is to give more screen real estate for the UI elements to use.

    For its effect in the battlefield, it should be a nice balance between SRPG close up sprites and Western CRPG stickmen.

    Moreover, while pixel art is still being used, the style is changed from painting to pop-up style which make key gameplay sprites and features more visible.

    Character models are changed from my own OC to Tactics Ogre inspired designs since it look far better than my previous ones.

    Moreover, a relationship mechanic is introduced into the game. Characters that risk their lives together often will naturally bond together over time. Or hate each other.

    In battle, characters grant people they like or treasure, bonuses when they are nearby them and attempt to sabotage people they hate or dislike when those assholes dared to step near them.

    Naturally, better relationship will also introduce new story content, especially for NPCs.

    Two warnings however.

    First, everyone hate being the "acceptable casualty" for an AoE attack.

    Second, this mechanic not only apply to your characters, but also the enemies, especially in later parts of the game.

    While the chapter 1 is nearly finished, the early access release will be delayed until the overhaul is finished.

    Here's a gif of a revamped UI for your viewing pleasure.

  • Would someone like to show an example of the text files you use for handling data? Im just curious in seeing how you keep the data organized there, and how the data is read in C2.

    Just open any excel sheet and you already figured it out how I managed all my data and their maintenance.

    Any time I wish to import it to C2, I do eight important steps:

    1. Toss all data that I wanted into a new excel sheet.

    2. Do a Find and Replace for commas.

    3. Save as MS-DOS CSV

    4. Do a Find and Replace for CSV commas. (I use this | as replacement)

    5. Do a Find and Replace back for data commas (revert them back to commas).

    6. Create a new array for it if the data type is new.

    7. Import the CSV and link it up to my function that parse through AJAX.

    8. Create a new section in that function to toss all data from AJAX parsing to the array.

    And there, it is done. the data is available for use through the game.

    You can skip step 6,7 and 8 and just copy paste the new data straight into the imported file when you updated the data in your excel sheets.

  • > In game, I am using a combination of arrays and dictionaries to keep track of all the data in my SRPG.

    > To load external data into those data storage, I am using csv files which is load straight into the arrays.

    >

    > Here's a expert tip, don't ever compute long formulas (such as sorting or attack formula) straight using variables from a sprite object, especially when you have many of them presence.

    > Get the values from those variables, put them into arrays, global/local variables or dictionaries before calculating it.

    > Even better is if you don't put any computation variable on sprites and just put them in arrays/dictionaries beforehand.

    > You will find everything will run far smoother.

    >

    I am having difficulty understanding what you mean by this? What is wrong with using a variable off of a sprite? What is the advantage of copying it to the array before computing?

    I am unsure on how to explain in detail but the short version is that when you retrieve value from a sprite object, there is a bit of overhead, vastly more than data storage object. It is not noticeable if you are not computing anything difficult or a lot. The overhead accumulate as you parse through more sprites/objects for data for computation. And if you run several loops of it in a single tick, hanging is concern if you set 60 fps as your minimum framerate (as I do).

    For my game, the AI for each enemy run through thousands for simulation to achieve the optimal round plan based on their given AI archetype. So, I can see the difference quite clearly.

    There is a huge difference in speed and smoothness parsing through rows in arrays or keys in dictionaries than going through each individual sprites for their variables