Skip to main content

Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines

Tamschi

90
Posts
4
Topics
116
Followers
98
Following
A member registered Oct 05, 2015 · View creator page →

Creator of

Recent community posts

(2 edits)

The first link goes to Save Core (YEP), which doesn’t use the problematic method.
(Character sprites for saves work a bit differently and are already supported.)

BM MV Shop does clear the window, so the workaround is a little more involved but still very manageable.

YEP Shop Core appears to be paid, so technically it’s out of scope for free support.
That said, I thought of a way that may just work for all callers of Bitmap.prototype.clear and Bitmap.prototype.clearReact at once a bit earlier. I’ll test that with BM MV Shop and it’s pretty likely it’ll just work with the Yanfly shop plugin too.

I likely won’t have time to implement and test this this week, since I’ll be away over the weekend and a few days into next week. It’s pretty likely I’ll get it done at some point within this month, though.

Thanks a lot for your feedback, it makes development a whole lot easier!

(1 edit)

Right, that’s a tricky one since it basically assumes that the Bitmap is already in memory. Looking at the code… I think the help text may be wrong and it may just work anyway in most cases 😅

I think I misinterpreted how the save file dialogue works when I first implemented this.
I also wasn’t able to test this directly since the engine doesn’t use this function.


If it doesn’t work, what I’d do is something like this:

class Sprite_WindowCharacter extends Sprite_Character {
    initialize(character, x, y) {
        super.initialize(character);
        this.x = x;
        this.y = y;

        // If the positioning is wrong, then change
        // `this.anchor.x` and `this.anchor.y` here.
    }

    updatePosition() { /* Do nothing. */ }
}

Window_Base.prototype.drawActorCharacter = function(actor, x, y) {
    // This (tracking the sprites separately) may be unnecessary.
    let actorSprites = this._actorCharacterSprites;
    if (!actorSprites) actorSprites = this._actorCharacterSprites = [];

    const sprite = new Sprite_WindowCharacter(actor, x, y);
    actorSprites.push(sprite);
    this.addChild(sprite); // Could also be `addChildToBack` and (in MZ) `addInnerChild`, maybe.
};

// This should work for windows that *don't* use `this.contents.clear()`.
// For windows that do, the respective caller has to be hooked to remove the character sprites.

And I think that should basically patch that method to use real, asynchronously-loaded and dynamic character sprites. The downside is that they’ll appear in front of text.

If you tell me which plugins these are that use this function (and if they’re free), then I could look into implementing this workaround into Dynamic Characters as optional feature. No promises on the success though.

(1 edit)

Glad to hear that! And yes, I’ll still add target groups.

Individual layer offsets are not supported or planned.
I don’t think that’s possible without interacting with the spritesheet layout directly, which most likely wouldn’t be compatible with e.g. 8-dir or “more character frames” plugins.
(The layered bitmaps are “baked” into a single texture, since not modifying the scene graph is by far the most robust approach.)

I had a better idea that will work without performance downside: Target groups.

For any group, you’ll have to specify only one target in the rules and all other group members will be added as targets automatically. Groups will be editable in a separate parameter and at runtime through the JS API.

That still requires setting up the group once on your part, but I think that’s worth it in terms of making the game run smoothly on weaker systems. I’ll see if I can add it to the release candidate within the next few days.

(2 edits)

Note though that you can already select any number of targets for a single rule and can copy/paste the target list all at once with Ctrl+C/Ctrl+V while “Targets:” is highlighted. Does that work for you?

I’ll hold off on adding wildcards until you reply, since I’d rather avoid adding a feature that may perform quite badly.

(2 edits)

Not yet, but I can add wildcards (to the release candidate for now, but there should be no problem moving to the stable release once I complete that. Some things happened and nearly everything in my life got delayed, unfortunately).

It’s not too complicated, so I’ll likely do it today or tomorrow. I’ll let you know when it’s online.
The downside is that it will have considerably worse performance (only if you use that), since it will turn off some optimisations that are only possible with precise target lists.

(6 edits)

Thank you very much for your patronage! I’ll try to include better instructions before long, but currently I’m a bit too busy to make a video or demo project quickly.

I can show how to do this in screenshots, which will hopefully be enough to get you started (using the Battler Entrance Flipbooks plugin you got, but the process is very similar for all Flipbooks control layers):

First off, these plugins are mostly declarative, so rather than scripting animations in note tags or Events, almost everything is set up in the “Entrance Rules…” parameter here in the plugin settings:
Entrance Rules…

This is a list of structures, so double-click an empty row to create a new “rule”:
Rule setup
The most important settings here are “Play flipbook…” and the parameters nested under “Enable for:”, shown by the mouse cursors. For the latter, choose all actors and enemies that the idle should apply to, and/or type in a note tag to detect for this purpose. ["0"] means “none in this category”, double-click a row to get an actor or enemy chooser.

When you double-click on “Play flipbook…”, you get this screen to set up the animation:
Play flipbook…
Which settings to use here depends on the battle mode your game uses.

For example, to animate enemies in a front-view battle, you’d use the settings below “for Enemy (Note):”, and for the idle loop specifically the “then repeat:” parameter, here:
then repeat:

Double-click the parameter and then double-click an empty row to get the image chooser:
then repeat: (open)
Select an image

For enemies, your animation frames must be separate image files, but they can have different sizes if necessary. The bottom center of the images will be aligned.

You can select each image one-by-one here, but it may be faster to use Ctrl+C/Ctrl+V to copy and paste some settings or to use the “Text” tab to (carefully) type in the parameter directly. Make sure to switch back to “File List” to ensure the array is formatted correctly:
list of cels

You can also use “first intro:” to add cels to play only once at the beginning. My setup for the demo video looks like this (in side-view mode, so I used “for SV Enemy” instead):
Play flipbook… (filled)

Confirm everything with “OK”, save and reload, and now the animation should play automatically on the battler(s) you chose earlier. You can adjust the speed with the “frame delay:” parameters.


Occasional Battler Flipbooks works much the same, but here you also have to choose one or more occasions for when to play the animation, here:
on occasions:

The options to choose from there are a bit technical, but for example to set up an attack animation you’d use Game_Battler..performAction as occasion and set up the parameters at the bottom of the flipbook like this to avoid the white flash that normally is used when an enemy attacks:
flipbook settings

For an enemy damage animation, you’d instead select Game_Battler..performDamage and these parameters:
flipbook settings

You can experiment with this a bit, there is help text for each parameter and there are also drop-downs for most of the built-in values you can use. In some cases, you can also enter custom values, but that may be less useful here unless another plugin adds more motions or effects.

Make sure that Occasional Battler Flipbooks is loaded after (below) Battler Entrance Flipbooks in the plugin manager! Layers that are loaded later have priority over layers that are loaded earlier.


Please let me know if anything is still unclear.

It does, yes.

(2 edits)

I just updated the core and all layer plugins with a new ‘Framing’ parameter, since it was a small change.

This now allows you to use Single-image PNGs as animation frames on spritesheet battlers (default for new and newly edited flipbooks). Make sure to load the flipbooks layers after anything else that animates battlers to give them priority!

You can also set it to Unchanged (it’s a drop-down) to keep framing effects visible for that flipbook. That includes the default boss collapse animation, for example.

(1 edit)

[…], it makes for less files anyway.

In this case not, no. Battler Flipbooks swaps out the whole image per animation frame, so you can’t have multiple frames in the same file. (There’s no image part picker UI I could use in the parameters.)

There is one bundle that combines Entrance and Occasional flipbooks with Sound Effect Events. That’s effectively 20% off for that combination.

That said, Entrance Flipbooks wouldn’t work for you since you want the state to be visible, and Sound Effect Events is trickier to use since it requires note tag scripting in the flipbooks. (I can’t make that easier in the plugin parameters, unfortunately.)

For your purposes, I would start with just Battler Reaction Flipbooks and see how it goes. Occasional Battler Flipbooks is something you may want to consider for custom collapse animations or basic enemy attack animations (if you currently use plain non-animated enemies).

Let me know if you need help with anything! I’m currently a bit too busy to make entire plugins, but I can still provide support for the existing ones.

Ah, one thing to note though:

When used on already-animated battlers (like actors, by default), those will remain in spritesheet mode. I haven’t touched this project in a few years, I think it would be easy to make a small snippet that changes that to “whole image” during animations, if you want.

That way, you wouldn’t have to copy the entire sprite sheet for each animation frame.

(3 edits)

If Battle Reaction Flipbooks allow me to have specific skills trigger specific animations from the target on hit, without any frame limit, it’s already a lot. […]

That’s correct. There are no frame- or animation-count limits (beyond how many you can load into memory at once).
If certain animations can occur only in few battles (for example due to a specific boss’s attacks), you should use the “Filter subject?” condition for them though, as that avoids preloading them elsewhere.

I do have a few additional questions:

  • Do you have something similar for states? For example loop a specific animation while the character is idle, but under a specific state (such as charmed, poisoned, etc.)

Same situation as with “Battler Action Flipbooks”, unfortunately, but may be a bit easier to make since I wouldn’t have to deal with battle phases 🤔
I’ll see what I can do, but please don’t take that into account right now since I don’t know when I’ll be able to focus on it.

If having only one entrance animation and idle loop is okay for now, Battler Entrance Flipbooks will do that.

  • I might need to have the animation used when reacting to the skill depend on some other variables (such as what the character has equipped, or because I might swap the battler spritesheet in specific conditions and the animations should match the current battler spritesheet), is that possible?

Yes. Not in terms of current spritesheet directly, but equipment, states and switches are all available as built-in conditions. (You can use the free-form “JS condition” to check the spritesheet, but that requires a little bit of JS and engine knowledge.)

You can also filter by how much damage was incurred (absolutely or as percentage of HP) or how effective the attack was, and such.

  • And lastly, how hard is it to make use of your plugins for someone who is not particularly well-versed in javascript? I am used to mostly do basic stuff like make script calls, use notetags (like action sequences), create folders and put the right assets at the right format in them…

Technically you don’t have to touch the keyboard at all to set up the reactions you mentioned. Everything is configured using structured plugin parameters and will use the appropriate picker where available. You can also choose to use text-mode entry for each parameter, of course.

You can define your own note tag in “skills w/ note tag” too, which is likely more convenient than selecting each individual skill. (Also possible for actors/enemies that react or are the attacker!)

All parameters come with descriptions explaining what they do.

There are some advanced features like “flipbook tags” that you can use to make animations conditional on other animations just before, which might be a little more difficult to get into.
For example, you can use that to show progressively worse crumple animations for each hit in a multi-hit combo or animate differently when the party gangs up on an enemy and slices and kicks them in quick succession (or vice versa).

Occasional Battler Flipbooks doesn’t have detailed filters, so it can’t distinguish different skills or items.

For reactions, you’ll likely want Battler Reaction Flipbooks instead, which does have that kind of very fine-grained control. (See the screenshots there.)

I haven’t implemented a “Battler Action Flipbooks” layer, mainly because nobody nudged me to make it. These fine-grained animation controller plugins are a ton of work, and admittedly I wasn’t too motivated since I didn’t get any sales at the time 🥲
(I think it’s mainly because you need quite a bit of custom spritework to make use of them, and most RPG Maker games just aren’t that high-budget. I’m also really not good at marketing, though.)

If you don’t want to wait for me to make the latter (I can’t offer an ETA, but I’ll keep in mind that there’s interest after all), you may be able to make your own control layer on top of Battler Flipbooks Core, which contains all the resource management and scheduling logic for this plugin series. I have an example here: https://github.com/Tamschi/rpg-maker-plugin-templates-cc0/blob/develop/Battler_Flipbooks_LAYER.js

Sorry, that’s probably not the answer you were hoping for. There may be a way to use Action Sequences to (conveniently) control Battler Flipbooks animations, but that plugin maker team is a bit hostile to other people making compatible plugins so I haven’t looked into it. Is that something you’d be interested in for the skill animations?

(2 edits)

I just updated it anyway 😊

Please (make a backup of your project¹ and) download version 1.0.2, it is considerably faster.

¹ Mentioning it for everyone else (@Critterprinter will likely just use Git for that), and just because it’s a good idea in general. Technically this plugin is far less likely to delete part of your project than RPG Maker itself², but still it’s a good idea in general.

² RPG Maker doesn’t atomically update your data files but erases them and then writes the new version. If it crashes during that process, then data is lost.
My plugin here saves a new version of the file separately and then renames it over the old version, which is much safer.

You’re welcome :)
(In MZ, you can now also set “JSON Format Level” to 2 in System 2, but that is a bit too expanded in my eyes, so it could cause conflicts not to happen where there should be some.)

Let me know if playtest startup becomes too slow. I’m doing something extremely inefficient to collapse parts of the JSON that can easily be optimised if needed.

(2 edits)

Just as public follow-up, there were no functional edits in the modified version.

There were global functions added to revert/restore the overall input mapping, but this is already available via the API by manipulating Input.gamepadMapper[TSC_RStick_Mouse.parameters.leftClickButton] (with TSC_RStick_Mouse.INTENT_MOUSE_LEFT as value that enables the mapping). You can also disable the initial mapping in the plugin settings.

I generally recommend using the API rather than editing plugins in order to make updating them easier.

(2 edits)

Sure, though it seems you don’t have published contact details I can use. (Your website has expired.)

You can find my up-to-date contact information here: https://itch.io/blog/480852/tamschis-support-contact-information-inquiries

Note that I won’t look at the edited code without explicit permission to implement the fix on my end, just for legal safety.

Edit: I think the easiest option would be to send the edited plugin via email.

Hm… for what it’s worth, this shouldn’t need specific support for anything other than cursor-change plugins.

  • If the other plugin polls TouchInput like the engine does, or hooks functions other than the ones below, it should work regardless of load order.
  • If the other plugin hooks uses TouchInput._onMouseDown and/or TouchInput._onMouseUp, then load this plugin after the other one.

Though, some plugins do indeed use custom mouse event handlers, which means they won’t see the ones this plugin here generates.
Since the VisuStella team updated their plugin (https://itch.io/post/12238393), please try again with the updated version to see if it’s compatible.

(1 edit)

For what it’s worth, the build with the PNG included is also live now, since about an hour ago. It says “0.1.3” as version because I mistakenly left the “0” in place from another command yesterday.

I was able to push it with the correct version number just now, so that should update eventually. Edit: Quicker than expected.

I called this one “1.1.3+cursor-image” to distinguish it, but I’ll most likely use plain version numbers for future versions again.

(5 edits)

Thanks. I know roughly why this happens: Sprite_Cursor is a Sprite_Picture so that Dynamic Pictures can be used to make it dynamic. It seems that VisuStella Picture Common Events assumes Sprite_Picture appears only under specific circumstances and/or never has a pictureId of 0. (I chose that ID specifically to avoid interference with other plugins, since for example in this case any other would risk turning the cursor into a button.)

Normally this would be easy to figure out and patch, but there are two reasons I don’t provide further support in this case:

  • The plugin is not publicly available. I can’t efficiently debug something I don’t have access to.

    Their Terms of Use also explicitly forbid you from sharing it with me, as it has to be repurchased for each developer who works with it separately.

    (It’s fine to (privately) share my plugins within your team freely. I only care about how many entities publish games with them.)

  • Second, as you can tell by the <computed> in the stack trace, VisuMZ plugins are obfuscated. That makes it, mildly put, difficult and/or cumbersome for other plugin creators to ensure compatibility.

    (I guess I care too much about providing a good product to do that. The obfuscation also hurts performance of the finished game.)

You’ll have to ask Team VisuStella about it. For what it’s worth, fixing it (assuming it’s the only incompatibility) shouldn’t take them more than ten minutes or so and would improve compatibility of their plugin in general, not just with R-Stick Mouse.

Ah, I forgot to include it in the latest version. There seems to be a delay with build processing in itch.io, so here’s the correct file (which you should save as img/pictures/RStick_Cursor.png):

RStick_Cursor.png

That doesn’t explain the error you’re seeing, though. Do you have a stack trace? Maybe there’s an incompatibility with another plugin.

(3 edits)

Thank you for the praise and patronage, much appreciated 😊

Yes, you can retrieve this info through my plugin’s API.

(() => {

  // Override the updateHelp method for Window_SkillType

  Window_SkillType.prototype.updateHelp = function() {

    const skillTypeId = this.currentExt();  // Get the skill type ID from the command

    const bcd = TS_Battle_Command_Descriptions.parameters.battleCommandDescriptions
        .find(bcd => bcd.skillTypeIds.includes(skillTypeId));

    if (bcd) this._helpWindow.setText(bcd.description);
    else this._helpWindow.setText("");  // Default empty text
  };

})();

I haven’t tested this, but it should work. It’s not necessary to include null/undefined checks for most properties in my plugins since I normalise them to always be populated.

Much appreciated 😊

There is a commented-out debugOnly plugin parameter definition in the source code, below the usual header. You can copy that below the one for slotKeys__ (mind the start of the lines, you’ll have to replace // with *) and set it to OFF.

That said, this will most likely break something and/or introduce glitches in practice. This plugin really doesn’t have enough safeguards to use it in production.

In theory you can adjust the checkStop function to block normal behaviour of the function keys (though I’m not sure you can prevent a reload on F5 that way) and change onKeyUp to check for the function keys instead of the slot keys.

Overall though, this is all unsupported. If you were looking for a quicksave/quickload plugin to use in a released game, I wouldn’t recommend mine unless you can edit it yourself to avoid glitches. I can request a refund in case this isn’t what you were looking for.

(1 edit)

Thank you for tagging this piece of art swiftly and accurately – it was hard to miss appearing in every “ai-generated” sub-tag all at once.

I’m also very grateful for learning about the Ink plugin this way, that’s going to save so much work for myself and friends 😁👍

(3 edits)

The 'attack' and 'guard' skills can differ depending on the actor. That’s why I didn’t just use 1 and 2 there for their ID.

It’s only an extension point in the engine for plugins though, so you can’t change this in the editor by default. There’s a WeaponSkill.js plugin floating around that makes use of this, for example. (I’d link the original page but I’m not sure where it is from.)

(2 edits)

You’re using VisuMZ_1_BattleCore to set up the menu, right?
Due to its obfuscation and lack of public API, I don’t support its custom features directly.

That said, you can load your code as separate plugin after mine, to make it easier to update my code:

'use strict';

// Untested, but very likely to work.
const oldGetActorCommandHelp = TS_Battle_Command_Descriptions.getActorCommandHelp;
TS_Battle_Command_Descriptions.getActorCommandHelp = function (commandData) {
  if (commandData && commandData.symbol === 'singleSkill') {
    const object = $dataSkills[commandData.ext];
    const help = object && object.description;
    if (typeof help === 'string') return help;
  }
  return oldGetActorCommandHelp.apply(this, arguments);
};

You don’t need to look up the _list entry because commandData should be exactly that object already. It’s also a good idea to avoid accessing the window through SceneManager._scene, as another plugin may reuse Window_ActorCommand in a different scene or under a different property name.

Thank you for your patronage and for sharing your issue and solution!

(1 edit)

I just read the bug description on your game’s page. Have you used the Event Searcher to ensure the Switch is set only in that one Event?

No, that is not a bug or glitch in RPG Maker. It’s functioning correctly in those regards.

This is most likely a mistake in your own Event scripts (or their activation condition, or the order of Pages in a Map Event), which by its nature can’t be fixed by generic plugins.

(3 edits)

Important update:
NW.js versions newer than v0.72.0 may be incompatible with Windows 7 and 8/8.1.
Please see https://support.google.com/chrome/a/answer/7100626 and https://nwjs.io/blog/ for information.

As long as your game doesn’t connect to the Internet, it’s most likely safe to use v0.72.0 of the runtime in order to support these systems. I’ve added this information to the instructions.

Please note that for Linux systems, the most recent runtime without known issues is still recommended.

(3 edits)

Important update: I now recommend the 32-bit version of NW.js for Windows.
It’s marginally slower, but has better system compatibility and lower memory requirements than the x64 version.

For Linux, please continue to primarily use the 64-bit version, as not all modern Linux systems still come with the required 32-bit libraries.

Yes, anything that uses “Show Picture…” should work without issue.

If you still notice anything at all that seems amiss, let me know and I’ll look into a fix as soon as possible.

(4 edits)

MogHunter’s MenuBackground, VisuMZ CoreEngine’s backgrounds* and SumRndmDde’s Menu Backgrounds are all unaffected by this plugin, as they use different mechanisms to load and display the menu background(s).

* as far as I can tell. The VisuMZ series of plugins is obfuscated, which is why I generally don’t add specific compatibility tweaks for them and don’t guarantee any level of compatibility with them in particular.

Your best bet would be to see if you can implement the background changes with one of those plugins alone, or alternatively to write a small plugin that displays a Picture sprite in the background of menus.

It may also be possible to use my Live Menu and Pause plugin to get the desired effect (as it can keep the map scene active without filter), but this would require at least some Event scripting to show/hide the background and may not always be perfectly in sync.

Your English is fine, perfectly understandable.

It depends on how the other plugin is implemented. If it uses the Sprite_Picture/Game_Picture mechanism to show the image, then it’s most likely compatible, but that’s just one way to display a static background image in a scene.

If the plugin is public and free, feel free to link to where it’s available here and I’ll check. (It’s not a problem if it’s in a different language.)

Currently (as of NW.js 0.88 and 0.89), there seems to be an issue where the process may sporadically not exit at least when playtesting, which prevents further playtests until RPG Maker MV is restarted.

NW.js 0.80 is reported to not have this problem. Certain versions in-between may work fine too - I recommend using the most recent version that is unaffected by this issue.

(5 edits)

Thank you for your support!

I’m a bit too busy with other things to make an extensive example project right now, but this functions pretty much exactly like layers in most image editing programs (with “Normal” blend mode).

Just make sure to set the base image that you use in RPG Maker as ‘Targets:’ here and any additional layers as ‘Add Layers:’ and they will show up as long as their condition is fulfilled. (With no further changes, this is always the case for a given rule.)

You can find the equipment conditions in the ‘Actor conditions…’: Flip the filter to ON/true for armour or weapons (if both are ON then both must match!) and add any armours or weapons to ‘armours’ or ‘weapons’, respectively. (You’ll get a picker dialogue for almost everything, so no need to note down ID numbers.)

You can also set conditions based on note tags instead, by creating one in the ‘w/ note tag’ fields instead of specifying individual equipment or types, but generally I think it’s easier to use the picker.

You won’t need anything more for basic dress-up, but for example for hairstyles you can use variables. (Pictures don’t react to Actor tags added through Dynamic Chracters, but you can still use the tag system to show or hide layers dynamically based on other conditions. You can use this if your conversation sprites have different poses that aren’t fully determined by the base image, for example.)

There are a few more features that can save you some work over time, so make sure to explore the available parameters and the hints near the start of each help text as it’s convenient to you.

Thanks for the suggestion! I’ll add a link to the page for convenience.

(1 edit)

There ended up being a decent amount of necessary adjustments 😅

It should be working perfectly now, though.
Let me know what you think!

This plugin hasn’t been tested with MV yet, but aside from the plugin command, there’s a good chance it is compatible already.

I’ll likely get around to backporting it soon-ish.

(2 edits)

Please don’t stress out over it, but thank you, any amount really helps.

Battler Flipbooks Core can be used for free, so please first make sure it works for what you’d like to use it for. (There is an option to not pay anything after you use the “Download now” button on this page.)

If you’re satisfied, you can use the button again and enter the amount that feels right to you.
If you decide on an amount that would be enough to purchase one of my paid plugins, I recommend making that purchase instead, since that way you’ll get another useful plugin 🙂

(It really is fine to do this, since my compensation doesn’t depend at all on which one you choose if you enter the same amount.)


And just to make sure there’s no misunderstanding: You don’t need a GitHub account to use the template. First click on Battler_Flipbooks_LAYER.js, then on this button above the file content to download it to your computer:
Download raw file

You can then save it in your plugins/ folder and edit it with any plaintext editor if you need to make changes.