0 Favourites

Construct 2 (J)/RPG-Design

  • Hello, currrently I am about to start working on a JRPG using Construct 2. And have noticed there are a lot of plugins for Construct 2.

    So was wondering for those of you that have worked on, working on, or finished an RPG-Style game with Construct 2. What type of plugins or methods of making some of the systems have made things easier or more comfortable for you?

    I've seen some mentions of using Arrays in Construct 2. Haven't used those in other things I've made on here, but have started to play around some with them testing things out.

    I've read that some people have been using the program Tiled for the maps. I also found a Plug-in for the XML/JSON files which Tiled can make which is a Plug-in by rexrainbow located here.

  • Doesn't seem like many want to discuss their processes of easing te making process of a JRPG or RPG with Construct 2.

    I started working on the battle system for mine. While there are a lot of discussion about people how they are liking the ARPG style more than turn-based(Zelda-style over FF-Style). Personally I like the FF-Style, but one ting I've done in my current battle system I'm coding for mine is made it toggle-able where players can choose to use ATB bars for their attacks while in battles or can have it Turn-Based through an options menu that they can change back and forth while not in combat to their desire.

    For Battle system for multi-controls(Gamepad+Touch+Mouse+Keyboard) functions seem to be nice to use for it. At the moment for my testing of the battle system I'm writing up events for I have a Player 1 fighting a Player 2 both controlled by me with different keyboard keys or clicking on the screen just to test out the damage based off of attack vs def with variance to make the values have a range. Attached is a SS of the multi-controls I've put into it to call for Player 1's attack function at the moment. Currently I have all the actions on a single sprite. The only way atm I've found of recognizing them since both are used on both sides P1 and P2 is by calling them by their UID's. If anyone knows a better method for that(yes I know could probably go with a separate sprite for every action and then call on just that sprite, but there could be a method with C2 I'm not thinking of).

  • Construct 3

    Buy Construct 3

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

    Buy Now Construct 3 users don't see these ads
  • I think I'm further along in my RPG than most (Courier), so I'll give a bit my input. Firstly, my game doesn't have any turn-based battles, so I have nothing to comment there other than do a good job of state management.

    The main plugin that has benefited me has been rexrainbow's Z-sorter. The only reason I use it is because you can't pair sprites and tiled backgrounds simultaneously in a family, so the internal C2 method for z-sorting (for each ordered loop, send to front) won't let the player run behind/in front of tiled background objects like fences. I also don't have it sort every tick because it isn't necessary.

    The game isn't tile-based, so I can't comment on that stuff, but have reusable resources. Everywhere. I have a bunch of Tiled Backgrounds (and sprites) that I piece together to make everything in the game. This reduces the overall video memory, reduces asset production for you, and has very few disadvantages.

    Lighting and shadowing are important. I have a good number of overlay sprites that I use for gradients over objects as well as light halos and other effects. I also have a couple dedicated shadow layers for the cast shadows from objects. These are made of a certain number of primitive shapes, all dark blue, all at 100% opacity. Then just lower the opacity of that layer and the shadows will remain merged and more realistic. I also have shadows cast on the player and world objects by having a second set of shadows set to one of the "source" blend types so it only shows when an object or the player is present.

    As for inventory, plan ahead on a creative system that doesn't result in a big, stupid list or something. Perhaps a bunch of boxes or something, but plan this ahead so you can come up with a workable solution (probably in an array) for management of it.

    I keep a spreadsheet constantly for myself where I track my reference numbers for every quest, character, item, or object in the game so I can always quickly reference what I need. For quests, I have a cell in my overall array dedicated to each quest. If the value there is 0, the quest is untouched. If it is 1, that quest is active, and if it is 2, that quest is complete. Any other numbers are for multi-step sequenes within that quest. I'm quite happy with this system because it makes tracking things a breeze.

    Tween everything! Everything should fade, move, slide, rotate... something! And I'm specifically talking about your UI. This goes a long way in making your game go from looking cheap to looking polished. And it's simple enough to set this stuff up early. Just get in the habit of automatically having something fade in instead of appear, etc.

    Interactive music makes a very big difference if you're up to the challenge. If nothing, it solves the problem of endless repetition, but you can really immerse the players in neat, subtle ways that they might not even realize. Plenty of top games do this, but many indies do not. This really applies to a lot of games, but RPGs are well-suited since they are so state and stat-driven.

    Spend the extra time getting your 8-direction animations going. People will gripe if you don't, I promise.

    For speech, I don't bother with a type-writer effect because it takes more effort and rarely lines up with the player's own reading pace in any way. I opt to fade in each message one at-a-time. I simply set the text that I need, turn the text variable to "on" (which fades in the text), then wait for player input to fade it out again. If it was the end of that message, turn text to off so it stays faded out and fades out the rest of the speech UI. If not, once opacity = 0, change the text to the next block and fade it back in.

    There are probably a ton more things I could talk about, but those are some non-standard things that have made a big difference in my RPG development.

  • Hi there daehawk ! I'm working on a small RPG prototype at the moment. There isn't much to tell specifically about how to organize code: I'd just say you'll want to separate every single system from one another (handle the animation states somewhere, manage the flow of the battle elsewhere...). If your blocks of code become interdependent, you might soon get stuck.

    There are two solid plugins I use at the moment: LiteTween from lunarray and JSON from Yann. The latter tool permits you to manage data from JSON, and I use it for pretty much anything that I'd like to edit from outside of C2 (like the items of the game, key values...). This is particularly interesting because you can update those JSON files later on the html5 build without having to reupload everything.

    The only interesting thing I can say from my work is that after having done that little proto, I'm going to make other simple games that explore some simpler aspects of those systems and build some kind of inner engine/framework: because making a solid rpg-esque system that scales well and remains manageable seems to require a least quite a bit of C2 experience.

    Good luck going forward, and good luck C-7 on greenlight =) !

    Nathan

  • Thanks for the reply C-7 . Yeah I had seen your Courier game a week or so ago. Very good concept and game you have going with it. Interesting puzzles and challenges throughout delivering the mail for the character. I'll check out the Z-Sorter plugin as well. rexrainbow seems to be the one to go to for plugins lol.

    Inventory+Banking system is one of the next ones I'll be working on for mine. Still working on the combat system atm since have different styles of attacks that people can do. I know some people in the "what do you hate" thread have said they don't like QTE, some say they don't mind it as long as it's not unnecessary/a ton of them. I was planning for combat that a QTE pops onto the screen when the player activates their special. If they do the QTE correctly the attack does it's full damage, if they fail then it does a reduced amount. But I won't have the QTE Random rather similar to that of Sabin from FF6's Blitz. Where each one is set so you will know the way to do it, but have multiple ones that people can either unlock or acquire.

    Yeah the speech boxes are one of the things that are sometimes hard to pull off in the exact style that you want. Especially while playing a game I normally set the text speed to the highest just because otherwise you're playing the waiting game waiting on the next part of the text for the story to appear. Voice acting for them could be interesting, but the usage of processes and loading if the game is web-based could be an issue though. Considering with my Mario Pacman game I had made for a friend I left out some of the m4a music files from it for anything other than an sfx, because the file size of the load was so large with m4a. With 2 bg-music m4a's the load changed from 3mb to 24mb.

    Thanks for the information on tricks that have assisted you in your process of creating your game. Also non-standard things help a lot for development finding out a new trick to do something in a slightly different way with optimization.

    -----------------

    Hey Valerien thanks for the reply. That is good advice to make each system separate, something that some people might not think of for designing the event sheets. It's kinda what I was planning on doing is to make each of the side systems(Battle, Inventory, Crafting, etc) in it's own Event Sheet then use Include sheets to put them into the Main one that has some global parameters for the game perhaps. My current Main event sheet only has the Battle Include and re-activating the mouse from where my loading screen on start hides it. So haven't decided fully what all will need to be inside the Main event sheet other than the includes. Will probably see what needs to go there after I get all the subsystems in place.

    I'll check out those two plugins you mentioned. LiteTween goes with something that C-7 had mentioned as well so might be one definitely to check out by people.

  • I made a current test of my the battle system I've set up so far. Haven't worked on Animations the sprites are all from http://opengameart.org/.

    It's not completely faultless and I'm sure there are some more optimization in the events I could do. I actually did a recent optimizing for the events which reduced a lot of the repeated ones last night.

    I haven't set up:

    ~Character animations on attacks

    ~Blocking effects for that feature so that's set to disabled atm even though the icon I still have it to light up

    ~Status Effects(Poison, Sleep, Paralysis) will be with weapon effects and alternate spells

    ~Special Attack QTE

    ~Items Menu(Healing items, Mana Potions)

    ~Spell Choices for alternate spells

    ~Combat Bonuses

    ~AI

    At the moment it's set up where both sides are controlled by the viewer in order for me to test certain different features of the attacking. Controls are listed on the screen cept for the Gamepad Controls.

    For Gamepad: A = Attack, B = Magic, Y = Special

    You can also just click/touch each icon or use Keyboard controls.

    Icons are: Sword = Attack, Shield = Block(Not enabled), Ankh in Circle(Magic), Skull(Special)

    Battle System Basics Test

  • salam (peace)...

    I didn't yet started thinking on how to make RPG with Construct2 but I'm interested (I have RPG idea but the story isn't complete and it needs a team & I'm SOLO worker)

    hmmm... about this :

    The only way atm I've found of recognizing them since both are used on both sides P1 and P2 is by calling them by their UID's. If anyone knows a better method for that(yes I know could probably go with a separate sprite for every action and then call on just that sprite, but there could be a method with C2 I'm not thinking of).

    I don't think making P1 & P2 on the same sprite a good idea ,have you tried or thought of families?

    you still have to use UID to target them though..

    OR NOT-

    I once made a game (a test game actually) that creates and destroy the same sprite over & over again, since getting it's UID in real time is pain I use Instance Variable to get it. yeah it's the same way UID works but you can target more than one Instance if you made them with the same variable value.

  • salam (peace)...

    I didn't yet started thinking on how to make RPG with Construct2 but I'm interested (I have RPG idea but the story isn't complete and it needs a team & I'm SOLO worker)

    hmmm... about this :

    >

    > The only way atm I've found of recognizing them since both are used on both sides P1 and P2 is by calling them by their UID's. If anyone knows a better method for that(yes I know could probably go with a separate sprite for every action and then call on just that sprite, but there could be a method with C2 I'm not thinking of).

    >

    >

    I don't think making P1 & P2 on the same sprite a good idea ,have you tried or thought of families?

    you still have to use UID to target them though..

    OR NOT-

    I once made a game (a test game actually) that creates and destroy the same sprite over & over again, since getting it's UID in real time is pain I use Instance Variable to get it. yeah it's the same way UID works but you can target more than one Instance if you made them with the same variable value.

    Greetings Ahmadmanga,

    The character sprites there atm are just place holders for that quote was about the Battle Icons above their heads in combat. Yeah I've used families in a few things in my Mario Pacman game and in this game atm I have Families set up for the Display bars on the stats, the text for the stats, and I have the Battle Icons in a family alone atm that I use to call upon them that way to set their Opacity based on ATB/Turn, Mana, and Special.

    Like here I'll post some SS's of my current system set up:

    [attachment=1:3df8273b][/attachment:3df8273b]

    [attachment=0:3df8273b][/attachment:3df8273b]

    [attachment=2:3df8273b][/attachment:3df8273b]

    The Battle Screen will have set type of icons that will appear above players heads. This is just the layout using atm to test it. For now have 1 player on each side, later will have more and will change a few more things with that layout and such. But mostly trying to set up the inner workings first. The Battle Icons I was talking about are the ones in the top image where their opacity are dimming or lighting up upon certain conditions. But since instead of using multiple sprites for each I have 1 Sprite called "Action" then within that I have the animations "Attack" "Block" "Cast" "Special". Then I placed 4 of each of those on each side of the field and changed it's Initial Animation setting it up to where it's the one I want to be displayed. But to recognize if it's the one on the Left side or Right side of the same Sprite Animation is being clicked I used it's UID. But yeah that's what the quote you posted was talking about.

    I've added some more sound stuff and animations to the Battles in my newest update to it that I haven't uploaded. Haven't worked out a solution to something I'm having a slight issue with the animation. I am using one work around solution atm, know of one more that could do it but it's not one I want to do which is just put it's collusion on the attack itself. Since eventually going to have more than just one on each side would rather the collusion call upon a single function. Work around I'm using right now is a wait command on the trigger to wait a second before calling the function and the function is called when the object is passing over the object it's supposed to collide with that then triggers it to go off where I wanted it to and then set off the explosion. But that's probably just a messy work around and might not work on a different angle shot. So yeah, just things working on playing with, seeing what I can do with it to work it with C2 the way I want it to lol.

    Edit: Went ahead and uploaded the current with the audio and animation of casting. Can be found here. Working on Special and Attack animation and sound atm for testing.

  • daehawk : You rather want to use a for each loop at the start of your layout and for each character, create a variable id = Self.UID;

    Then, every time you want to call a character you have filtered, you just have to call objectName.id

    ahmadmanga : it's good to have characters inside a family to give them the same instance variables etc. easily. You can also manually assign them a tag to easily filter them in the code (if character.type == "playable", -> do some specific actions...). But UIDs are key to avoid code duplication and scale up your engine: using trigger events (on animation finished), you can filter one instance and send its UID to a function. The function picks the object by UID and does all kinds of stuff to it!

    Good luck guys,

    Nathan

  • daehawk : You rather want to use a for each loop at the start of your layout and for each character, create a variable id = Self.UID;

    Then, every time you want to call a character you have filtered, you just have to call objectName.id

    Valerien : Thanks for the feedback and this is actually a good idea and method. Also has properties for some other things that I am now changing the way their events are set up for. As well as gave me some ideas on how to change some other things I was working on setting up. Thanks.

  • So, I personally try to use a single or a few trigger events in order to push the battle turn to its next state. In my latest prototype, I basically use "on tween finished" or "on MoveTo hit target position" to check who arrived where, and tell a given character what he should do next. Also, I work with the "on animation finished" trigger to change the animation state of each character.

    This way, there is only a few triggers which call the battleManager function, directly or through another function (like characterMove("attack", targetUID, combo) calls the battleManager if the attack combo ends for whatever reason). Each aspect of the system I could separate from the others is split into its own function and/or even group.

    Can't help much more without seeing your code. But, if you're interested, I'll make an "advanced" tutorial based on the work for my latest project. Some kind of postmortem. I'm wrapping up the prototype itself today or tomorrow (got a bit delayed).

    Cheers,

    Nathan

  • Valerien An "advanced" tutorial I'm sure will help out many others that are also interested in making an RPG with Construct 2. The more methods people know that they could potentially use for certain things can help them grow. Using your advice earlier with the "id = Self.UID" I had created a new layout and event sheet, since I figured I could probably work better in setting up the pieces together with it going from the beginning.

    There has been two issues I've ran into somewhat in the battle system remaking it. I've done some a work around for both of them at the moment. One of them the work around can hold fine, the other one I'm going to need to actually find a better way to do it for future additions.

    One of them is something you've completed for your prototype Dan the Rabbit. Which is the Attack buttons that pop up above his head. Now I'd tried a part where "Turn = Character.ID. Trigger Once" for the spawning of my BattleAction Icons, Watching it in just Run Layout it looks fine. But watching it in Debug Layout it's actually ignoring the trigger once and constantly spawning them on the character.ID who's turn it is. So modified it to an Opacity and Start of Layout set up that works. Which isn't too bad for a turn based menu atm for me, also changed the amount of events it used from 22 in my old system to 7 now. Works yes, but probably not the most ideal.

    This is the way my current one for the BattleActions are for players being run: [attachment=2:1nzy1992][/attachment:1nzy1992]

    So my question for you though are you using an opacity type for your Actions or were you able to come up with a way to actually get them to stop spawning rapidly?

    The other thing that I've been having some issues with that I've tried a few different things is setting up something in the Families for the Rotation of Turns. While using a single avatar for the character and setting it as the following:

    [attachment=1:1nzy1992][/attachment:1nzy1992]

    It works perfectly fine. It will set up PlayerLowest and PlayerHighest on each instance of CharacterMage. But if I have it spawn the other Characters as well from the spawn script with it set to the Family Character, and then change it from CharacterMage to Character in the setting the PlayerLowest it will only set the lowest ID with the Lowest ID and the Highest ID with the Highest ID. If I set it for each it sets the Lowest and Highest as the current ID. Hmm while typing and still thinking just had an epiphany so going to set up a method I just thought of.

    Yup it works. Before when I had it set up and it was working fine I only had Characters on both sides. Earlier today I had added Enemy on the opposite side and then started getting the issues I described above. But I've done the change I had an epiphany on and it works the way I wanted it to with the variables.

    For those that might run into an issue like this for their event set up, and want to see what I did to solve it:

    [attachment=0:1nzy1992][/attachment:1nzy1992]

  • Thanks, If I was to discover that by myself (Taking UID send it to function) it may took months..

  • daehawk : seeing your code, it seems like you use many events to do the same thing. Also, the way your events are setup, everything is being evaluated on every single tick. It may cause issues later not only as far as performances are concerned (on lower end devices), but it can also provoke bugs.

    I've been taking rest this week, was quite tired. But I'll be sure to continue making commented capx, and start a series about rpg-related systems. I'm launching a website on which I'll publish articles about game design and C2 in the first half of July.

    A quick thing about the turns: I use two group of events (playerTurn and enemyTurn) which are being toggled on and off based on the flow of the battle. I'd have to go on everything in greater details, and show some example code to convey the idea properly I think. I'll do this in an article/tutorial.

  • daehawk : seeing your code, it seems like you use many events to do the same thing. Also, the way your events are setup, everything is being evaluated on every single tick. It may cause issues later not only as far as performances are concerned (on lower end devices), but it can also provoke bugs.

    While running some events every tick can cause performance problems on some platforms if the events are intensive enough (collision detection is more intensive than checking a variable, for example), running events every tick, by itself, will not cause bugs. There's a misconception going around that using every tick is bad, but it's really not.

Jump to:
Active Users
There are 1 visitors browsing this topic (0 users and 1 guests)