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)
Based on the stack here, I'm guessing that perhaps somehow an unsupported AI mode was selected and leveraged? (or none at all) It is difficult to say. Was there anything else in the console?
Also, it does not appear that you have opted to update to the more recent version i mentioned above, as you still have some classes split out (the plugins that are prefixed with "_" were my efforts to split my code, but I have since done away with that pattern a couple of months ago). Understand when I say that I cannot (easily) go back and readily review the code to really troubleshoot much further than that. As you understand that I am constantly iterating and improving the codebase for stability, I would always encourage grabbing the latest to upgrade when possible.
Based on the stack here, I'm guessing that perhaps somehow an unsupported AI mode was selected and leveraged? (or none at all) It is difficult to say. Was there anything else in the console?
Also, it does not appear that you have opted to update to the more recent version i mentioned above, as you still have some classes split out (the plugins that are prefixed with "_" were my efforts to split my code, but I have since done away with that pattern a couple of months ago). Understand when I say that I cannot (easily) go back and readily review the code to really troubleshoot much further than that. As you understand that I am constantly iterating and improving the codebase for stability, I would always encourage grabbing the latest to upgrade when possible.
Are you attempting to re-use an existing save file after updating the plugin stuff? As you might suspect, while I go about my refactoring and cleanup, sometimes I may adjust/rename properties which can cause issues with existing saves.
If the issue persists, I can only speculate what the possible issue could be without getting my hands on the problem project. If you can narrow down minimal reproduction steps, I may be able to further assist, though.
Such steps might look like:
Start new game >> add new party member >> change ally AI >> party cycle >> crash
Are you attempting to re-use an existing save file after updating the plugin stuff? As you might suspect, while I go about my refactoring and cleanup, sometimes I may adjust/rename properties which can cause issues with existing saves.
If the issue persists, I can only speculate what the possible issue could be without getting my hands on the problem project. If you can narrow down minimal reproduction steps, I may be able to further assist, though.
Such steps might look like:
Start new game >> add new party member >> change ally AI >> party cycle >> crash
I appreciate your guidance.
I started a new game and played all the way through to where the issue occurs. It's still generating the same error, but with most of the same references:
rmmz_managers.js:2036 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)
The only reference that changed was rmmz_managers.js, which refers to this code:
Specifically the console.error(e.stack); is highlighted.
I will try to package the game up and send you a Google Drive link. It may not be until early next week.
I always happens right after I use an attack. I can take hits without issue. I am going to try a new location with my 2 party members and see if it still happens.
I appreciate your guidance.
I started a new game and played all the way through to where the issue occurs. It's still generating the same error, but with most of the same references:
rmmz_managers.js:2036 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)
The only reference that changed was rmmz_managers.js, which refers to this code:
Specifically the console.error(e.stack); is highlighted.
I will try to package the game up and send you a Google Drive link. It may not be until early next week.
I always happens right after I use an attack. I can take hits without issue. I am going to try a new location with my 2 party members and see if it still happens.
If you have replaced the entire /js folder with the latest stuff found over in my releases section of JABS, then I would not expect to see any references to "_jabsManagers.js", or really any plugins prefixed with "_", as that was refactored away.
The time system itself is custom one I built myself.
If you opt to use it, I'd encourage messaging me directly to ask more about it since it is not formally released anywhere (though you're welcome to use it).
The time system itself is custom one I built myself.
If you opt to use it, I'd encourage messaging me directly to ask more about it since it is not formally released anywhere (though you're welcome to use it).
Ah no I got my own time system running (also with seasons and a basic hud - displays just text info though by default lol) that can also be linked with my Dynamic Weather system that is... not finished. I am slackin on all my plugins lately lol
I was just curious. I like the idea of using the icons in it though. *Thumbs up* Looks very nice.
JABS - J's Action Battle System
J / JE / Jragyn
v3.1.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.
Basic 8-directional movement (doesn't support 8-dir character sheets though).
The demo has DOES have an adapter plugin that enables Cyclone-Movement to grant pseudo pixel movement as well.
Crude 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 comes with a bundle of plugins that are designed as "extensions" of JABS:
AllyAi: enables allies/followers to fight alongside the player.
InputManager: a plugin that translates button/key input to JABS actions.
This is effectively a sample for how to build your own input mappers for JABS should you want to change your input layout or what have you.
Diagonals: enables 8-directions for actions (such as a fireball).
CycloneAdapter: a plugin that fixes some of the quirks with how Cyclone-Movement works in the context of JABS. This should be disabled if not using Cyclone-Movement.
Speed: enables the ability to set custom move speeds across the database and/or for events.
Timing: enables cooldown reduction and the like.
Charge: enables charging a skill one or many times to release and perform a different skill.
DangerIndicator: enables little icons that show up near enemy battlers that indicate how dangerous they are to the player based on magic formulas.
Log: a log window that reflects various things that have happened, such as gaining experience or being afflicted with a state.
This also comes with a slew of other plugins that were designed to work with JABS, but not necessarily as an extension, just compatible:
DropControl: enables greater control of drop count, drop rates, and so on.
SDP: enables custom stat growth by spending points (earned by defeating enemies) towards collections of stats called "panels".
LevelMaster: enables giving enemies levels, scales exp/gold rewards, scales damage, all based on level differences.
Escriptions: formerly known as "Event Descriptions"; enables icon/text descriptions to be available over events with event comment commands.
SkillExtend: enables skills to give other skills various features (mostly in the context of JABS parameters).
Proficiency: enables skills to have proficiency based on use, and to potentially give rewards such as learning new skills.
TextPops: enables popups on the map for text, such as damage popups.
Elementalistics: enables greater control over elements, including allowing absorbing elements, having multiple elements, etc.
CriticalFactors: enables greater control over critical hits, including critical damage reductions, multipliers, chances, etc.
NaturalGrowth: enables temporary or permanent stat growth from various things in the database, such as equipment or states.
Difficulty: a custom difficulty system that modifies enemy parameters and rewards based on the chosen difficulty.
MessageTextCodes: adds a few new text codes for use throughout RMMZ, such as weapon or armor references.
OneTimeItemBoost: enables permanent flat/percent stat growth on the first time an item was used.
PassiveSkills: enables learned skills to also passively grant the effects of one or more states.
How to Use
Due to the nature of new battle systems, it would be best to download the demo which showcases its features.
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.
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.
See the plugin help/description in RMMZ for details.
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).
if ya click the "JABS Demo" link in the original thread, it'll bring you to a screen that looks something like this:
As indicated by the thicc red underline i added, you can download the appropriate "Source code" option that applies to you, and within that should be the entire project as-is, including the project file.
If you are familiar with github, you can also clone down the "chapter-3" branch, as that is where I am currently doing my active development in.
As indicated by the thicc red underline i added, you can download the appropriate "Source code" option that applies to you, and within that should be the entire project as-is, including the project file.
If you are familiar with github, you can also clone down the "chapter-3" branch, as that is where I am currently doing my active development in.
It's been while, how are you today?
I know I've been very busy in my college and project, but I forgot something to tell you:
1) When the enemy attack you, it should be change sprite like taking damage.
Is there way to add something when enemy or player change the sprite for taking damage?
2) Also, when the enemy find you, it play sound like signal. And that mark "!"
How I can remove it the mark and the sound? it really bothering me.
1) When the enemy attack you, it should be change sprite like taking damage.
Is there way to add something when enemy or player change the sprite for taking damage?
There is currently no "pose" functionality for taking damage. When I get around to actually rewriting/updating the "pose" functionality (what JABS calls what you're describing), I'll likely implement this and a few others that don't exist but probably could/should (like dashing).
The sound effect associated with an enemy engaging with a target (when the "!" pops up) hasn't been a part of my codebase or any release for quite some time. I'm thinking you may want to consider updating to the latest.
Hi, long-time lurker here. Thanks so much, J(eremy?), for your work. I'm noticing that there's a J-ABS 3.0 in the most recent chef-adventure, but there's also a J-ABS 3.1.1 in previous iterations, I think? The 3.1.1 version has an extensive guide in the plugin notes that's missing from 3.0, but I ran into some unique errors with 3.1.1 also. I guess I'm just looking for clarification as to what version is the most up to date and stable, or which do you recommend we use right now? (And does the guide in 3.1.1 also apply to 3.0?)
Thank you!!!
Edit: for added clarification after looking around some more, I'm finding that ca-ch3-v0.2.0 is the package with the documentation included and (I think?) a different setup for plugins (which gave me issues), whereas the more recent ca-ch3-v0.2.1 lacks the documentation but (for me at least) has a more stable setup of plugins.
I guess I'm just looking for clarification as to what version is the most up to date and stable, or which do you recommend we use right now? (And does the guide in 3.1.1 also apply to 3.0?)
You might guess, but this (JABS) is 100% a side project for me, literally a side effect of wanting an ABS that met my needs, and noticing that RMMZ didn't really have much out there that wasn't paid or otherwise underdeveloped... so I just built it myself.
I built it for myself, for my own project: "CA" (also known as "Chef Adventure").
The releases you find on my github page are releases of said project, and not necessarily of the plugin itself. Rather than cutting new releases for just the plugin, I cut releases for the game project when I am ready for that.
The result of cutting releases for the game rather than the plugin is that it can lag behind where I'm actually at in the development process of JABS (since it is an ever-growing monster of a plugin).
As a result of the releases on my github being releases of my game project rather than releases of the plugin(s), it is an accurate statement to say the latest rendition of my plugin(s) won't be found there (though the release should work- at least in the context of the game project it is built within).
If you are familiar with github/source-control, I'd simply keep at eye out on where the latest commits are going. In the context of my game project I use as a demo for JABS, I'm currently working out of the chapter 3 branch. Due to this being my (long-running) feature branch, the stability of it can vary, but there you can find "the latest" (of which you'll find that JABS is actually v3.1.2, and many of my plugins will have seen updates).
I also should probably pull all documentation that isn't in the plugins.
The plugin documentation should be relatively comprehensive as far as tags and usage I think?
I have attempted to build out external documentation, but quite frankly I get bored and just give up.
If you have specific questions, feel free to peruse the thread- lots of others have asked and I've answered where applicable.
You can also ask me (here or directly).
I have observed that in the latest update to RMMZ, v1.6.1 (at least the latest one that Steam auto-downloaded for me), that there was a rollback to the nw.js code. The rollback was:
-Changed NW.js to the same version as v1.5.0 (v0.69.1 -> v0.48.4)
Which is a pretty massive step backwards as far as technology/optimizations is concerned, though I heard some folks were less fortunate, and this was required to even get their engine running at all.
The unfortunate downside to this, is that this will many if not all of my plugins broken, including JABS (and quite possibly other plugins from other developers).
RMMZ uses nw.js to work its magic. As nw.js's version goes up, they also update the version of node.js that is used. The version of node.js defined by nw.js determines effectively what version of javascript is available to the developer. According to the release notes, the devs rolled RMMZ's nw.js version back from v0.69.1 to v0.48.4. The result of this is that the node.js version used by RMMZ was changed from v18.9.0 to v14.9.0. I would welcome you to peruse all the updates to the language of javascript that were introduced in those four major version downgrades, so you can understand the limitations of what you can no longer do in-javascript. The result is that many of the features I learned about and wove into my plugins are now not-valid-syntax, resulting in numerous syntax errors across the board that I'm not willing to fix. If you are a bold/reckless and/or tech-savvy individual, you could manually update your local version of nw.js to rectify this, (which is what I did to continue my work), but obviously I will not be the one to answer to any technical woes you may encounter while following such a path.
Until the devs behind RMMZ return it to the latest nw.js version, they will remain broken, as I have no intention of adjusting my code to accommodate this... but I am sorry for any who are impacted by this.
The result is that many of the features I learned about and wove into my plugins are now not-valid-syntax, resulting in numerous syntax errors across the board that I'm not willing to fix.
The only invalid feature that I noticed (in a very cursory glance) was your usage of Array.prototype.at(). But that can be polyfilled decently enough with something like this:
JavaScript:
if (![].at) {
Array.prototype.at = function(index) {
index = Math.trunc(index) || 0;
if (index < 0)
index += this.length;
if (index < 0 || index >= this.length)
return undefined;
return this[index];
};
}
I can't promise that there aren't any other issues that I failed to notice, but this at least enabled me to play through the introduction cave in your demo without any problems. Maybe you'd be willing to include that (or something similar) in J-Base.js for now?
If not, people can include the attached plugin in their project and make sure that it's above all of the "J" plugins in their plugin manager.
The only invalid feature that I noticed (in a very cursory glance) was your usage of Array.prototype.at(). But that can be polyfilled decently enough with something like this:
JavaScript:
if (![].at) {
Array.prototype.at = function(index) {
index = Math.trunc(index) || 0;
if (index < 0)
index += this.length;
if (index < 0 || index >= this.length)
return undefined;
return this[index];
};
}
I can't promise that there aren't any other issues that I failed to notice, but this at least enabled me to play through the introduction cave in your demo without any problems. Maybe you'd be willing to include that (or something similar) in J-Base.js for now?
If not, people can include the attached plugin in their project and make sure that it's above all of the "J" plugins in their plugin manager.
convenient!
I thought I ran into a couple other things related more specifically to the depths of my other plugins (unrelated to JABS directly, but living in the same project), but I'll be sure to include this in there just in-case.
There's something bothering me when I try to close the game by choosing "Exit", when I select "Exit", it should be closed the game but it won't it! I don't if there's a problem with the plugin or another plugin.
There's something bothering me when I try to close the game by choosing "Exit", when I select "Exit", it should be closed the game but it won't it! I don't if there's a problem with the plugin or another plugin.
1) in the video, you selected "To Title Screen", which as-expected, brought you to the title screen.
2) in RMMZ, there is no native "Exit Game" functionality from the Main Menu, you can only exit from the title screen.
3) i went ahead and downloaded casper's (CGMZ) exit-to-desktop plugin like you did, and it works as expected: it closed the game completely.
Tiny setback. Turns out my Title Screen image and one of my primary background & avatar images are AI Generated. Glad I went back and checked all my resource links. So I am in hot pursuit of replacement images. Which is fine since I was still missing some images that I need anyway.
Got drawn back by a notification about QPlugins. For those who want the MZ versions I was using, they're on my Github. https://github.com/ImaginaryVillain/QPlugins I literally don't care what you do with them, have fun!
Meanwhile.. I'm glorying over these 550 new Victorian house models Epic gave me this month. See next post for examples....
Got my new monitor. Good news is, my display issues with linux are okay now. Bad news is, the readability of letters is a bit worse compared to the previous one.
Also, why the heck did I buy a 21.5" one when it's no longer sufficient for my needs?
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.