JABS - J's Action Battle System
J / JE / Jragyn
v3.0.0
Introduction
Using this engine will enable you, the RM dev, to create a game where battles take place in real-time on the map between the player (with their allies if they wish) and the enemy. Interactions between enemies are by-design expected to be fast paced, no more than 5-10 seconds at most, allowing for development of zelda-like games from the SNES era.
This was largely inspired by Blizzard's ABS (BlizzABS / BABS, for XP) and Moghunter's ABS (XAS / Chrono Engine, for XP+/MV).
Features
JABS stands for J's Action Battle System. (Clever, huh?)
Enemy battlers can be created via events w/ specific comments.
Enemy battlers will follow their configured AI (that you decide with comments).
Enemies can have default parameters to reduce the overhead for enemy creation.
Ally battlers will follow their designated AI mode (changeable via menu and tags).
Ally AI is a separate plugin and can be disabled if a solo game is desired.
Ally AI can be toggled with switches and by enabling/disabling followers via event command.
An aggro system that works for both enemies and allies(if used).
Aggro is based on damage dealt (all kinds), and is configurable.
Tags are used on skills to allow for creation of things like aggro-generating or reduction.
Tags are used on states to enable aggro multipliers (positive or negative) or aggro locks.
Crude/basic 8-directional movement (doesn't support 8-dir character sheets though).
Crude/basic animation support.
Animation as in, changing of the character sheet to something else for a short duration to give the illusion of animation.
I am no sprite artist and opted against commissioning folks for assets just for testing this functionality, so it may be kinda glitchy. When I get my hands on the type of assets I'm looking for, I will revisit this.
This also comes with a few extra plugins that one may expect in an ABS, but are by no means required (just useful):
A simple HUD.
The HUD was largely uncustomizable by design. However, I did open up plugin parameters to move the whole thing around, and hide everything but the states (which are custom-managed by JABS) so you could use this HUD alongside another and still get full visibility into all the data points you would want or need.
A simple text log for tracking actions that happen.
A simple action key setup to display what skills are equipped.
It is important to note that the Ally AI is actually a separate plugin. It can be disabled or toggled as needed.
Designed to work in tandem with any of my other plugins.
How to Use
Due to the nature of new battle systems, it would be best to download the demo which showcases some of the base features.
Additionally, I have a public (unlisted) wiki in the works that has things like a notetag glossary, important notes, how to do things related to JABS, etc.
In summary, there are lots of note tags on events, lots of additions to things in the database, a new required map, and voila!
Fortunately, you can just use the demo as a base and build from there.
Additionally, this engine was built with using a controller in mind. Though the keyboard does work, I'd strongly recommend using a controller to play any game created using this engine. A variety of controllers I'm sure will work, though I used this controller for development. Peek at the links at the bottom for a reference to all inputs for this engine.
From top to bottom (in plugin command screenshot):
- Enable JABS = turns on the ABS.
- Disable JABS = turns off the ABS (most base code I've tweaked will revert to normal while JABS is turned off).
- Force-assign a JABS skill = manually assigns a skill to one of the L1/R1 (3-0) slots, and locks that slot.
- Unlock a single JABS skill slot = unlocks a slot from being force-assigned, allowing the player to reassign skills to the skill slot.
- Unlock all JABS skill slots = unlocks all slots (for those who force-assigned multiple slots).
- Cycle to next leader = party cycles to the next member of the party (if they are alive).
- Disable Party Rotation = prevents the player from being able to rotate the party with the party cycle button. This does not prevent the player from changing the party formation or anything like that, though.
- Enable Party Rotation = re-enables the player's ability to party cycle (if disabled from above).
- Refresh JABS Menu = refreshes the JABS quick menu. This is probably only useful for developers who are manipulating the items in the menu for one reason or another (like adding/removing commands to/from it).
Demo
A demo showcasing the primary functionalities can be found at the download link below.
Final Note
I deliberately left all code open for the public to view and edit as they see fit (please be kind and give credit where credit is due!). If you're savvy enough to tweak the code, I'd wager that you can also probably submit a pull request against my github repo if you want to contribute! If you do and your pull request is merged in, I'll add your name to the credits below! Hurray for open-source!
If you have questions about the code, I'd be happy to explain most anything you'd see in the J-ABS.js file (or any of my plugins).
Thank you, and happy RM-ing!
Before releasing to the public, this project has undergone many transformations through its iterations. Those with sharper eyes may recognize these assets! This project initially started as many do: I downloaded VisuStella and co.'s sample starter project and got to work. As a result, there are a few artifacts I didn't think twice about, most namely the tilesets and some of the sprites.
- The tilesets and some characters/faces are not mine, they were from VisuStella and co., so... thank you for making even other devs lives like my own easier to just pick up and get started doing actual content creation! Additionally, there are various other plugins within the sample project linked above that don't belong to me and weren't written by me. See their respective plugin help sections for additional details on credits etc.
- I believe it was Avy's work that created the icons in the iconset. It is a bit patchwork-ey because I wanted more things, but still, credit is due where credit is due. Additionally, it was Frankenstein'd with a huge number of other icons I acquired that probably aren't friendly about redistribution, so stay honest and don't use them!
- The characters/faces that are named with the pattern: "chara_*" are just characters I made using the built-in character generator. You are free to use them if you want, but know that with a little bit of time you could probably make your own! (and a bit of paint.net efforts)
- Moghunter and Blizzard provided inspiration and indirect guidance via their patterns in-code. When I was a lost lamb, unsure how to tackle a particular problem, their code showed me a means to do it myself. Though there isn't really any direct copy-paste (obviously due to engine differences and stuff), there is surely a distinct familiarity in-pattern on how my architecture was for JABS was shaped. Thank you, folks.
- My lovely lady who has had to tolerate the weeks if not monthsyears of time dedicated to writing and refining this engine for the public to use (and myself!). She has had to listen to me rant and rave about why the sprites aren't doing what I tell them, but I don't actually think she knows what a sprite is, but she listened anyway <3. She deserves credit, too.
FAQs
Any developer would be flattered to know that there are people who want to utilize their code for something that will reach the masses, me among them! If you decide to use JABS (or any of my plugins following the "J-*" naming pattern) in a commercial project, do let me know! We can discuss the finer details of what that all entails.
The project that contains JABS doubles as my test bed for all plugins I make. Some of them are simple (like J-Hud), while others are more complex (like J-JAFTING). I encourage you reach out to me to discuss them if you can't find anything about them anywhere as I just might've forgotten release them publicly, or I may have opted against it for other reasons.
If you encountered a bug/defect, post a screenshot of the console (if possible) along with as much detail as you can gather that you believe is related to the problem. I'm a professional developer by day, but definitely no QA! I'd be happy to fix any defects related to my code, or try my best to add compatibility to play nice with other plugins assuming their code is open as well (like f0mor's plugins, visustella plugins are a bit more difficult to deal with due to the code being obfuscated and you may need to have them reach out to me so we can talk about how to solve it).
It is difficult to say why it reminds you of a mystery-dungeon-like game considering this is an ABS engine.
Though, I do have it on my "list of things to do" to create a plugin that converts this ABS engine into step/turn-based map battling.
a new release is available, check the main post as I've updated the download link.
As a disclaimer, I've updated not only the itself, but also the way I build JABS, as well as all my other plugins. Due to this, it is strongly recommended to re-review the plugin in the demo project (the plugin description now has some basic help!), and also take a look at the way the plugins are ordered now.
- a multitude of fixes of various things I've heard over the last couple months from this thread in addition to a slew of things I've in my own playtesting.
- a pile of new extensions- some newly created, such as the ability to "charge" your skills; others just features I've extracted out of JABS as they aren't really necessary to do JABS things.
- I've changed the way AI is defined, from fun binary stuff like <ai:10100110> to more straight-forward stuff like <aiTrait:careful>. If you have a project and are upgrading, I'm sorry in advance. It could be a lot of work to upgrade.
In the original post, I also updated the list of plugins that I've included in the project so you know what you're getting yourself into.
I updated the original post with an updated release.
I don't think it solves all of the problem you've described, but it should lessen it a bit.
# Problem:
If a battler was controlled by AI, but acquired aggro on multiple enemies of the same exact amount, the ai manager would freak out and cycle back and forth trying to decide whether 0 is higher than 0, resulting in an infinite loop with the battler just standing there, probably repeatedly spamming the "?!" balloon.
# Solution:
Now if a situation arises where multiple of the same aggro levels are acquired, the ai manager will arbitrarily pick one of the two and give it +1 aggro to prevent the infinite loop.
while I realize this looks like a bug in JABS, surprisingly, it is not.
It is however, an oversight just in setting the enemy up, though.
# Explanation:
If you peek at the enemy, you'll see that it has the ai trait of "reckless".
The ai trait of "reckless" forces the battler to only use their skills, not their basic attack.
Looking in the database at the skills available to them, and you'll see that they only have one skill, and it costs MP, which this battler has none of. The result is that they just stand there, being an easy and open target for you to chop up.
That being said, I will fix it eventually, but the plugin isn't broken, just my brain is broken. (from trying to manage 80k lines of code spread across about 20 different plugins all by myself, along with all the content of the demo you see in the project).
I used to log to the console an error when that happened (setting up an enemy with no skills it can use but having the "reckless" ai trait), but decided I'd just be more careful about it.
- You need to add party members in editor, @Jragyn has only 2 characters, you can add more party members.
- Select "Change Player Followers", if you set on, all your parties will join you to fight. If you set off, you will fight alone.
- You need to add party members in editor, @Jragyn has only 2 characters, you can add more party members.
- Select "Change Player Followers", if you set on, all your parties will join you to fight. If you set off, you will fight alone.
Also remember to review the actual plugins themselves.
There is information in the plugin description.
(I'm sure the next question is "how do i tell the AI what to do?" which is covered in the plugin's help section)
While my demo is just that- a demo, it is by no means a comprehensive outlook of what the plugins can do.
Please experiment and try to do things yourself, too. You may come up with things that aren't in the demo (like building a bow and arrow. It is not in the demo, but very possible with JABS).
The demo I provide contains JABS in working order along with various examples of how JABS can be used in practice.
As with any complicated system, I'd encourage you to use the demo project as a starting point (feel free to nuke all but the "action map"), but you can also just attempt to transplant the plugins into a fresh new project if you prefer- just take note of the dependencies.
I would also warn you that not I don't make any plugin explanations or delineations of what functionality belongs to what plugin throughout the demo. The demo is just a game I'm working on, the reason I built JABS along with all the other plugins in the project prefixed with "J-", and figured it'd be the easiest way to showcase what JABS can do. However, most all the plugins I wrote should have some degree of help/explanation/description in the plugin manager, so do review those details as well. Including JABS.
Regarding multiplayer, I don't have any intention of creating online multiplayer (though I understand that at least one other ABS engine offers that), but I have been coding with the possibility of local multiplayer implementations in the future. I am hesitant to make commitments to such things, but it is on the radar. I have other things I'd consider higher priority, and I'd also like it to be a tad more polished/stable than it is in its current state.
Due to the need to handle additional functionality, like assigning combat skills or manage ally AI, the main menu access was shifted from its original access (pressing ESC Or X or something) to pressing ENTER on the keyboard, or "start" with most gamepads. From there you can find access to the standard "main menu" by choosing "Full Menu" (or whatever you called it in the plugin parameters):
JABS has no built-in ammo system or anything like that.
However, I would imagine those who built plugins that implement this could outside of JABS would require minimal effort to accommodate using the functionality within JABS. JABS does obey default skill cost requirements and does obey paying default skill costs, meaning compatibility should be high. However, visually they may need to create a HUD element to display the extra data on the map since that stuff isn't normally visible there.
Hi there
I have a TypeError Cannot read property 'key' of undefined. Here is the error as listed in dev console:
rmmz_managers.js:2032 TypeError: Cannot read property 'key' of undefined
at JABS_AllyAI.decideAction (J-ABS-AllyAI.js:1139)
at Function.JABS_AiManager.decideAllyAiPhase2Action (J-ABS-AllyAI.js:975)
at Function.JABS_AiManager.decideAiPhase2Action (J-ABS-AllyAI.js:953)
at Function.aiPhase2 (_jabsManagers.js:648)
at Function.executeAi (_jabsManagers.js:343)
at Function.handleBattlerAi (_jabsManagers.js:291)
at Array.forEach (<anonymous>)
at Function.manageAi (_jabsManagers.js:278)
at Function.update (_jabsManagers.js:242)
at Scene_Map.update (_jabsScenes.js:114)
This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
By continuing to use this site, you are consenting to our use of cookies.