+++ DYNRPG - THE RM2K3 PLUGIN SDK +++

Posts

Oh, there's alot more things that could theoretically be added to RPS+ and I'd like to see at least some of them implemented.

author=mail to Bugmenot
Let's see. I'd like:

  • Something like %12, but using percent (if you are over defense, it does a % instead of flat damage, for instance)
  • A "kill-self if attack/spell used" attribute
  • HP spell cost, instead of MP
  • "Heal if attack hits" (skills has absorb, so mainly for weapons)
  • Multi attack by variable (streamlining monster attacks with self-destruct and double attack, would open skills up)
  • Maybe a "total - current hp" effect, similar to the
  • "Evolving" (+attack by variable) weapon
  • Exceed 9999 damage

I also thought of mimicking double attack.

The point is, we'd all like to see some other expansions, because this is a cool plugin. I dunno how to get bugmenot involved in it, or if he wants to continue, or what's going on because I don't personally know bugmenot. Said letter is still unread.
wile waiting for bugmenot return (easter is coming up, so who knows :P ) here's some other suggestion for PSP+

%#(whatever number is avaliable lol)
author=me
- skills only -
skill with this attribute is affected by the lowered hit% of status such as "blind".


that could be useful to those kind of skills that still rely on phisical attack (ex: swordskills) - i know i already pointed this one out but i figured i'll put it here again for better visibility lol

author=me
%#(whatever number is avaliable lol)
- skills only -
skill with this attribute can be cast even if a status locks it (ex: silence status)


i think that's pretty much what shoobinator was asking for :)

author=me
%#(whatever number is avaliable lol)
- skills only -
skill with this attribute has a % chance of adding a status to the target


we all know that you can add to a weapon a certain % chance of adding a status, while skills do have a customized hit %, but if you want to have skills that damage the enemy and cause status, for example - you cannot have, say, 100 skill hit% and 25% causing status; this could be a good fix i believe.

I'd love a version of RPS with the bugfixes and Miss!-changes only, but without those %n-attribute things.

"Heal if attack hits" and "% chance of adding a status" can be done as a plugin.
author=GhostRider
wile waiting for bugmenot return (easter is coming up, so who knows :P ) here's some other suggestion for PSP+

%#(whatever number is avaliable lol)
author=me
- skills only -
skill with this attribute is affected by the lowered hit% of status such as "blind".

that could be useful to those kind of skills that still rely on phisical attack (ex: swordskills) - i know i already pointed this one out but i figured i'll put it here again for better visibility lol

author=me
%#(whatever number is avaliable lol)
- skills only - u
skill with this attribute can be cast even if a status locks it (ex: silence status)

i think that's pretty much what shoobinator was asking for :)

author=me
%#(whatever number is avaliable lol)
- skills only -
skill with this attribute has a % chance of adding a status to the target

we all know that you can add to a weapon a certain % chance of adding a status, while skills do have a customized hit %, but if you want to have skills that damage the enemy and cause status, for example - you cannot have, say, 100 skill hit% and 25% causing status; this could be a good fix i believe.


You can already do the one thing here involving Blind by using his SkillAccuracyFix quick patch. I have already got this to work. And while new ideas are nice, I am actually deep in the middle of a project right now where I need a replica of a standard attack for enemies created as a skill so that damage attributes can be applied accurately. Otherwise there will be some inconsistencies with the battle system.

Although I have now realized a condition that forces a target to attack (one of the regular options for RM2k3 conditions) may be one more issue, along with silence, to make the perfect standard attack skill replica. This is because it forces the Attack command to be used (actually will need to double check this) so a skill that mimics a regular attack would not be used.

Perhaps there is a way to scrap this and just straight up add attribute types to all enemy standard attacks, maybe via a quick patch that references damage attributes by index value or something.
author=bulmabriefs144
because this is a cool plugin
Well first off, it's not really a plugin. It needs/overwrites already existing space.
And my resource management is all over the place with that thing considering that free space is a (somewhat) limited resource.

I'll try to port it into a plugin and expand upon it. *When I find some time.
Primarily so you can go and bug others or yourself with it and/or with learning C++ or taking a look into the dynDocumentation.

I'm still trying to sort out what can be salvaged and see what callbacks need to be, so that ...stuff can be managed more comfortably instead of having to work around your workarounds to implement some of the things listed above with the help of new 0.30 features.
E.g. you can temporarily add a death condition with DArray<bool> RPG::Item::conditions or DArray<bool> RPG::Skill::conditions, and temporarily set its int RPG::Condition::susA up to susE to 100%.
It needs to trigger properly onDoBattlerAction, store the default values and reset back to the default values when the turn's done.
Now that's confusing and convoluted. That's where things can be changed.


author=GhostRider
PSP+
+snicker+

But yeah, the chance of causing a status was a formula that factored in SkillHit%, the user's Hit% (lowered by blind) and the condition's susceptibility% on top.
I've put that on a piece of digital paper for later.




Anyway, here's a thing:

Attribute/Condition Resistance Control
download ResistControlBug-in


Allows to control attribute and condition resistances of heroes and enemies.


>> SET ATTRIBUTE RESIST

Use a comment with the contents:

@set_arc_hero [1], [2], [3]

[1] = Hero_ID (from actor/hero tab in F8-database)
[2] = Attribute_ID
[3] = new damage multiplier (in percent) (min = -10000% | max = +10000%)

Substitute [x] with numbers or a Var_ID with a "V" in front
e.g.
"@set_arc_hero V32, 5, -70"

will have the hero from Var[0032] change his/her damage multiplier of Attribute 5 into -70%

>> GET ATTRIBUTE RESIST
@get_arc_hero [1], [2], [3]

[1] = Hero_ID
[2] = Attribute_ID
[3] = Var_ID to store current damage multiplier (in percent)

>> GET DEFAULT ATTRIBUTE RESIST
@get_adefault_hero [1], [2], [3]

[1] = Hero_ID
[2] = Attribute_ID
[3] = Var_ID to store default damage multiplier (in percent; includes JobClass and AttributeResistance from equipment)





>> SET CONDITION RESIST
@set_crc_hero [1], [2], [3]

[1] = Hero_ID (from actor/hero tab in F8-database)
[2] = Condition_ID
[3] = new susceptibility (in percent) (min = -10000% | max = +10000%)

>> GET CONDITION RESIST
@get_crc_hero [1], [2], [3]

[1] = Hero_ID
[2] = Condition_ID
[3] = Var_ID to store current susceptibility (in percent)

>> GET DEFAULT CONDITION RESIST
@get_cdefault_hero [1], [2], [3]

[1] = Hero_ID
[2] = Condition_ID
[3] = Var_ID to store default susceptibility (in percent; includes JobClass and ConditionResistance from equipment)







>> SET ATTRIBUTE RESIST (monster)
@set_arc_monster [1], [2], [3]

[1] = Enemy_Party_ID (#1 .. #8 by number in MonsterGoup)
[2] = Attribute_ID
[3] = new damage multiplier (in percent) (min = -10000% | max = +10000%)

>> GET ATTRIBUTE RESIST (monster)
@get_arc_monster [1], [2], [3]

[1] = Enemy_Party_ID
[2] = Attribute_ID
[3] = Var_ID to store current damage multiplier (in percent)

>> GET DEFAULT ATTRIBUTE RESIST (monster)
@get_adefault_monster [1], [2], [3]

[1] = Hero_ID
[2] = Attribute_ID
[3] = Var_ID to store default damage multiplier (in percent)





>> SET CONDITION RESIST (monster)
@set_crc_monster [1], [2], [3]

[1] = Enemy_Party_ID (#1 .. #8 by number in MonsterGoup)
[2] = Condition_ID
[3] = new susceptibility (in percent) (min = -10000% | max = +10000%)

>> GET CONDITION RESIST (monster)
@get_crc_monster [1], [2], [3]

[1] = Enemy_Party_ID
[2] = Condition_ID
[3] = Var_ID to store current susceptibility (in percent)


>> GET DEFAULT CONDITION RESIST (monster)
@get_cdefault_monster [1], [2], [3]

[1] = Enemy_Party_ID
[2] = Condition_ID
[3] = Var_ID to store default susceptibility (in percent)




@somewhere on page 42
author=Xenomic
I'm quite curious, is it possible to make a plugin that lets you put in custom values for the level up curve instead of using the default 2k3 EXP Level Up Curve which is terrible and I'm using because I don't have too much choice in the matter? I originally was going to make my EXP level ups be similar to FFV/FFVII, but couldn't do it due to this dumb table. I'm going to assume it's a no-go though...but thought I'd ask.

Ask someone who knows how to use KazString to add entire EXP sheets for each character. I made a plugin that adds in a pseudo-callback for when the required total EXP for a certain level is requested:
download ExtBug-in.cpp
int onGetLevelEXP ( int HeroId, int Level )
int onGetAttributeResist ( int AttributeId, int DefaultABCDE, int TargetPartyId, bool TargetIsMonster )
int onGetConditionResist ( int ConditionId, int DefaultABCDE, int TargetPartyId, bool TargetIsMonster )


Here's an example how to work altered EXP values:
download ExpBug-in
(changes the EXP-curve progression to be more 'exponential'. It's in fact based on RM2k, but the growth rate can be adjusted so the curves don't go through the roof around level 50)
Mmmm, that's fine. When you didn't respond I was like "bugmenot hates me or something." We all have time crunches or we're unemployed (which is a time crunch of its own, as it creates the need to job hunt).

Take your time and figure out which of these resources can do what without jamming things. If you can do more, let us know. Yeah, it's good to have a tight program that can do alot without hogging resources.

author=bugmenot
Ask someone who knows how to use KazString to add entire EXP sheets for each character.

Uhhhh, that would be me. And probably just me. ^_^; Hopefully someone can help me with what I'm working on in exchange.

KazString was originally Kazesui's help for a problem I had with trying to insert item names from steal so that I could do a massive number of items without having a massive number of switches, and a large number of common events as well. Given this patch, it was possible to store the number of the item as the item name.
With my natural insistent charm, I ummm motivated (nagged) him into expanding it to include skills, and then other stuff, like status conditions.

I pretty much learned DynRpg version C++ from this, and began using normal C++ codes on it. I'm pretty rusty at C++, because I learned about it in high school (which was 15 years ago). The idea was to try to do as many simple string and number codes as I could.

Then, I remembered that the one thing I had trouble with in C++ class was working with filestreams. As in, it was the first code I really couldn't get to work. So, I worked on learning how to do functions and work with filestreams. I basically now had a system that would make a text file called dystore.txt (what I'm wanting to do now checks a word from that file, on any line, and turns a switch on if found; I have only the barest idea of how to do this), allowing stuff like storing stuff outside the game so that I can set up a flag for something like a game plus, or so that I could have a password system that with no saving involved, the game notices that something is different, because the file has been read. I've put this into a new plugin instead of KazString, because I'm trying to expand on the file operations.

Okay, now for the important part.

There is a matrix int system as one called DynArray which uses a 50 x 1000 grid. But the code can fairly easily be changed to 100 x 1000 or any dimensions you want (ah, heck, I'll just change it). The code is pretty stable, so this is a fairly minor change. Anyway, you store the int inside a slot, and it pretty much acts as an offsite variable. You can use this to make individual chests to a massive degree. If you had over 1000 treasure chests? No problem, check that row 1, column 325 has a value of more than one. If it doesn't, the chest hasn't been opened, award an item, and set 1,325 to 1 or more. Now it will check it, and I can reuse a switch to be turned on over and over, and use two variables (row and column) to handle thousands of variables.

This is what you need to use. Make the character number your row, and make the exp tables your exp tables. So 1,1 would hold character one's level 1 experience to level to two. If the exp number matches that, you level up.

Okay, here's a list of all comments included in KazString:

@random_mystery
parameter#1 min range
parameter#2 max range
(random number storage. 0,1 gives a number between zero and 1)

@store_mystery
parameter#1 value
(stores into a variable named mystery)

@store_variable
parameter#1 variable
(stores variable information into mystery)

@store_switch
parameter#1 switch
(stores switch information into mystery)

(Mystery is sort of an undefined numeric value that can add to alot of stuff in KazString)

@store_item
parameter#1 ID of hero
parameter#2 ID of item

Stores an item name into a hero name

@store_condition
parameter#1 ID of hero
parameter#2 ID of condition

Stores the condition name into a hero name

@store_skill
parameter#1 ID of hero
parameter#2 ID of condition

Stores the condition name into a hero name

(You're storing the name of the item/condition/skill as a hero name, and then you can add it to a message as a \n value)

@store_string
parameter#1 ID of hero
parameter#2 Text string
parameter#3 end

(You can store your own message into a name. As in, I could type in anything and it would rewrite the code. I think you can already do this, but whatever)

@get_variable
parameter#1 variable
(stores mystery result into variable)

@get_switch
parameter#1 switch
(stores mystery result into switch, and turns it on or off)

(More mystery commands. This allows you to use the external mystery number to access numbers for switches or variables, to turn them on, fill in a number, etc)

@mystery_array
parameter#1 ID of array
parameter#2 Position of array (that is 2 , 3 is array 2 position 3)
(stores mystery in array, in place of parameter 3)


@store_array
parameter#1 ID of array
parameter#2 Position of array (that is 2 , 3 is array 2 position 3)
parameter#3 number/value

Stores the name info into an array. There are a maximum of about 20 arrays and

1000 positions, so you can use this to store a lot of data.

@get_array
parameter#1 ID of array
parameter#2 Position of array (that is 2 , 3 is array 2 position 3)
parameter#3 variable

Stores the array info into a variable. This is useful for rapidly replacing

numbers or working with massive data.

@compare_array
parameter#1 ID of array
parameter#2 Position of array (that is 2 , 3 is array 2 position 3)
parameter#3 number
parameter#4 switch

Checks the value of an array. If it is the same, turn on a switch. This is
useful for unique chests (get array can also be used).

(You will need these arrays to work the EXP table. The ID is basically the row, seeing that each array is three dimensional)

@compare
parameter#1 ID of hero 1
parameter#2 ID of hero 2
parameter#3 switch

Checks if two hero names are the same. If yes, the designated switch will be

set ON otherwise the switch will be set OFF

@compare_text
parameter#0 switch
parameter#1 ID of hero
parameter#2 string
parameter#3 end

Check hero name vs a string given.

(So the first one compares two hero names, the others one compares to a string you define (sort of the dynrpg version of checking a name). But despite being redundant, the comment interface means you can use it in and out of battles, and in all sorts of places.)






author=bugmenot
Anyway, here's a thing:

Attribute/Condition Resistance Control
download ResistControlBug-in


Allows to control attribute and condition resistances of heroes and enemies.


>> SET ATTRIBUTE RESIST

Use a comment with the contents:

@set_arc_hero [1], [2], [3]

[1] = Hero_ID (from actor/hero tab in F8-database)
[2] = Attribute_ID
[3] = new damage multiplier (in percent) (min = -10000% | max = +10000%)

Substitute [x] with numbers or a Var_ID with a "V" in front
e.g.
"@set_arc_hero V32, 5, -70"

will have the hero from Var[0032] change his/her damage multiplier of Attribute 5 into -70%

>> GET ATTRIBUTE RESIST
@get_arc_hero [1], [2], [3]

[1] = Hero_ID
[2] = Attribute_ID
[3] = Var_ID to store current damage multiplier (in percent)

>> GET DEFAULT ATTRIBUTE RESIST
@get_adefault_hero [1], [2], [3]

[1] = Hero_ID
[2] = Attribute_ID
[3] = Var_ID to store default damage multiplier (in percent; includes JobClass and AttributeResistance from equipment)





>> SET CONDITION RESIST
@set_crc_hero [1], [2], [3]

[1] = Hero_ID (from actor/hero tab in F8-database)
[2] = Condition_ID
[3] = new susceptibility (in percent) (min = -10000% | max = +10000%)

>> GET CONDITION RESIST
@get_crc_hero [1], [2], [3]

[1] = Hero_ID
[2] = Condition_ID
[3] = Var_ID to store current susceptibility (in percent)

>> GET DEFAULT CONDITION RESIST
@get_cdefault_hero [1], [2], [3]

[1] = Hero_ID
[2] = Condition_ID
[3] = Var_ID to store default susceptibility (in percent; includes JobClass and ConditionResistance from equipment)







>> SET ATTRIBUTE RESIST (monster)
@set_arc_monster [1], [2], [3]

[1] = Enemy_Party_ID (#1 .. #8 by number in MonsterGoup)
[2] = Attribute_ID
[3] = new damage multiplier (in percent) (min = -10000% | max = +10000%)

>> GET ATTRIBUTE RESIST (monster)
@get_arc_monster [1], [2], [3]

[1] = Enemy_Party_ID
[2] = Attribute_ID
[3] = Var_ID to store current damage multiplier (in percent)

>> GET DEFAULT ATTRIBUTE RESIST (monster)
@get_adefault_monster [1], [2], [3]

[1] = Hero_ID
[2] = Attribute_ID
[3] = Var_ID to store default damage multiplier (in percent)





>> SET CONDITION RESIST (monster)
@set_crc_monster [1], [2], [3]

[1] = Enemy_Party_ID (#1 .. #8 by number in MonsterGoup)
[2] = Condition_ID
[3] = new susceptibility (in percent) (min = -10000% | max = +10000%)

>> GET CONDITION RESIST (monster)
@get_crc_monster [1], [2], [3]

[1] = Enemy_Party_ID
[2] = Condition_ID
[3] = Var_ID to store current susceptibility (in percent)


>> GET DEFAULT CONDITION RESIST (monster)
@get_cdefault_monster [1], [2], [3]

[1] = Enemy_Party_ID
[2] = Condition_ID
[3] = Var_ID to store default susceptibility (in percent)





I'm starting to worry that you read my mind or something like that... i just finished asking miself "how can i make an effect who allows a character to temporarely absorb fire damage or, say, double the effect of a cure, without having to create hundreds of classes which have different atribute resistance/weakness, changing them every time and have to work around that stupid exp loss bug?" and boom, here's your plugin O:
As to something I talked to during with during the migration, LockeZ said

sscanf(string s, "word")

Could scan words from strings.

It's mainly a matter of dumping the entire contents of a file. I know how to open and close and save normal files with filestream normally. I looked up how to just dump a file, and it seems to be this.

std::stringstream buffer
buffer << in.rdbuff();
std::string contents(buffer.str());

Along with opening the file, and all the normal processes.

But I don't know if this copies the info (what I want), or moves it, getting rid of the file's contents.

I'm also not sure how to combine everything together properly. There's also a code from page 47 that I'm gonna try.

if(!cmd.compare("scan_file"))
{
//Attempt ONE to scan the file for a string
//this one works by turning on a switch if the string is found
FileName = parsedData->parameters[0].text;
ifstream myfile;
myfile.open (FileName.c_str());
scanfile = parsedData->parameters[1].text;
for(std::string temp;!myfile.eof();std::getline(myfile,temp))
{
if(temp.find(scanfile)!=std::string::npos)
{
RPG::switches[parsedData->parameters[2].number] = true;
//Turns on the switch if the string has been found in the file
//ideally, I'd want to save a new name using the scanfile, but I can't figure out how to copy it
}

}
myfile.close();
return false;
}

This is what I came up with. It works, it turns on a switch if the string has been found within the code. However, I also wanted to copy the string entered from scanfile to the name, but whatever.

Anyway... it's good enough to accept my offline trophy system, so I'm happy for now.

GhostRider, everyone here can read your mind and knows about your girlfriend.
author=bulmabriefs144
GhostRider, everyone here can read your mind and knows about your girlfriend.


Jeeze Louize... °-°
@bugmenot: Oh my. Glad you took that one up, was wondering if it was doable. Wish I had this much sooner, would've saved me 7 months of straight 12 hour work to do my Armor and Weapon Bless abilities heh. Would it be possible to get a good example of this in layman's terms to see how it works? For some reason, I'm a bit confused reading that, and having it explained in a simple way would help me out a lot with using this. There aren't any known bugs with it either right now either, yes??

In any case, this is great news as now I can also make my skills just inflict the conditions without having to worry about actually making thousands of copies of equipment! Though I'll have to forgo having any elemental animations on the weapons since I doubt there's a nice way to change graphics alongside the conditions.
Oh, is that what it does? I was too busy trying to figure out my code so I shut everything else out.

I'd prefer a quick demo myself. A short game using it so I could see how to fit the code properly (all the get and set comments, and I'm not sure how to put it together). It also seems like it would fit together better defining the status in the ini, versus the comment code.
Example? What do you mean 'example'?
author=bugmenot
(readme)
(comment)
@set_arc_hero V32, 5, -70
will have the hero from Var[0032] change his/her damage multiplier of Attribute 5 into -70%
Att#5 damage will be calculated with a 70% multiplier, negative damage / heal.


Or
(comment)
@get_arc_hero 1, 5, 2
get current damage multiplier (of Hero#1) of Attribute #5 into Var[0002]. Let's say it's 80% by default
(event code)
<> Change Variable: [0002] / 2
(comment)
@set_arc_hero 1, 5, V2
sets new damage multiplier (80% /2 = 40%). Effectively halving all further incoming damage from Att#5.


Or have an ability of a character increase the damage all monsters take from fire by a factor of 1.5
(comment)
@get_arc_monster 1, 1, 1
(event code)
<> Change Variable: [0001] * 150
<> Change Variable: [0001] / 100
(comment)
@set_arc_monster 1, 1, V1
repeat for monsters 2 through 8 (the plugin has a fail-safe to not crash if an enemy does not exist).


Or inflict dummy-conditions with Skills. After the turn (monster or hero) ends, remove the dummy-condition and apply a comment command to buff/debuff received elemental damage / chances of receiving certain conditions.

edit:
Conditional branches kind of need an update, since they can't detect crap in battle.
edit²:
Or write a small plugin that gets DArray<short, 1> RPG::Battler::conditions values into a variable, so logic can be applied.


it would fit together better defining the status in the ini
No. No, it wouldn't.
As in, make a quick demo program where you use it in battle.

Currently, I'm not sure how to hook up the set conditions so they run effectively when I need to get them, and there are alot of commands.

In terms of the ini, I didn't mean the code would work better, so much as... Well if you have status attibutes, you can either use code equal to monster parties (sometimes repeating the same code 285 times) or you can one time in the ini (if it works) set condition 14 to change elemental resist.
author=bulmabriefs144
In terms of the ini [...] set condition 14 to change elemental resist.

You can do that yourself, if you want. That's what the ExtBug-in.cpp is there for.

It adds a pseudo-callback right before the damage multiplier of an attribute or the susceptibility of a condition is requested. For easier accessibility and less headaches figuring out when to change the database copy and change it back to default and so on.

There's a party ID to access RPG::actors[ID] or RPG::monsters[ID] and an Attribute ID / Condition ID with the default A-E numerals so you can go check out the new dyn.30 source update that also added RPG::Attributes and RPG::Conditions.

Just put in some C++ code that asks if the target has conditions[status_ID] (e.g. "Fire DeBuff") and add 100 to int attribPercentage = RPG::attributes[X]->dmgA-E (where X is the attribute "Fire" and also int AttributeId of the callback, A-E from int defaultABCDE) or whatever you had planned.
...Nah, I'm good. (Scary code is scary, most of this was assembly stuff) I gotta work on other stuff today anyway, like my trophy system. I dunno, I'm just not as hyped as I am about your other stuff, maybe cuz I'm busy.

Would it be possible to set it up RPS+ style with A being ID of condition, and B being percent? This might produce a more workable thing (I can't figure out how to use this effectively, sorry).

Update: Who did the save check? Was it Pepsi? I need a bug workaround. Scan_file comment on the file_control plugin works, but causes a freeze if the file is not present. I need it to check if the file is there, and skip if not. If the file is there, even if blank, it skips the code anyway. I basically need to see the save_detector again.
here is another wierd request by yours truly :D

ok mostly thanks to bugmenot (who, if he hasn't crucified me by now he will most likely do it sooner rather than later) i can equip shields, armors and helmets in any of these 3 slots (i basically replace them with 'weapon mods' that somehow act like the generig rpg's accessoris (bonus str, +defense vs fire, stuff like that), and you can equip them in any order and you can also equip multiple copies of them.

now my request is, i would still want some of them to be unique amongst them (example: mod that allow your weapons to deal elemental damage should only be equipped once; for tecnical reasons you cannot have your weapon deal both fire and ice damage - mainly because i use multiple copies of the weapon with different attributes) so i was wondering if it's somehow able, via plugin/patch, to maybe put some 'tag' in the item description and not-allow the player to equip more than one item with that tag... or maybe simply force the game to still equip only one Shield and only one Armor item, regardless of which slots you put them (that way i could make this 'elemental' upgrades as shield, another possible unique mod as Armor, and the remaining - generic - mod as Helmets. could it be possible?
You can do this already.

Switch ExclusiveEquips ON

Common Event: ExclusiveEquips (Parallel, ExclusiveEquips ON)
If Item1 is Equipped
Unequip Item2

If Item2 is Equipped
Unequip Item1

(And so on...)
End Event Processing

However, you have to exit the menu to produce an effect. Bugmenot, would there be a way to make (certain, we don't want it lagged with all, so maybe listed in the .ini) events run even while the menu is on?

Text within the menu would be weird, but I have some items/skills that would produce dialogue.
author=bulmabriefs144
You can do this already.

Switch ExclusiveEquips ON

Common Event: ExclusiveEquips (Parallel, ExclusiveEquips ON)
If Item1 is Equipped
Unequip Item2

If Item2 is Equipped
Unequip Item1

(And so on...)
End Event Processing



I know that, and i could also work out a "priority" system, there are tons of workarounds i could, and will, use if i have to, but i still think that unallowing the item to be equipped at all would look nicer, if it's not possibile i'll work out something else for sure.
This gets awfully close into 'customization territory' (meaning I will not do that or else everyone and their brother would ask me to customize stuff just because they don't like something and want to have 6 more of something else).

**To (un)equip an Item via C++ :
        int eax = (int)RPG::actors[HeroId];
int edx = EquipSlot; //starts with zero: 0|1|2|3|4
int ecx = ItemId; //zero to unequip
asm volatile("call *%%esi"
:
: "S" (0x4B7DB4), "a" (eax), "d" (edx), "c" (ecx)
: "cc", "memory");
//equips ItemId (or unequips current Item) in specified EquipSlot of an Actor
Figure out all the logic from there.
**Dyn.30 added RPG::ItemType (if the logic doesn't have to be handled by ItemId)
Also, you don't need multiples of a weapon just to have elemental properties.
**Dyn.30 added DArray<bool> RPG::Item::attributes. Just set new values and you are done.
(just has to be tested for and re-assigned before every battle)

**considering someone takes the time to just compile a few (less than 10?) lines of code.


However, there is an easy way you could think about:
[QuickPatches]
Armor(Slot#2)=4B7A84,98,4B7A9C,02,4B8124,09,4B81B2,06,4B82BC,09,4B834A,06
Armor(Slot#2+4)=4B7A88,98,4B7AA4,02,4B8137,09,4B81BE,06,4B82CF,09,4B8356,06
Replace the old Armor(Slot#2) and Armor(Slot#2+4) lines with these new ones.
(add ,49EF72,20,49EF2C,20 behind one of the QuickPatches if you are too lazy to rename all slots into the same vocabulary)

Shield type equipment fits into Slot#2, Slot#3, Slot#4
Armor type equipment fits into Slot#3, Slot#4
Helm type equipment fits into Slot#4


Rename the equipment vocabulary:
Slot#2 = Mod(A)
Slot#3 = Mod(B)
Slot#4 = Mod(C)

So if you give the player some:
...low level "stuff" (shield / Mod(A) type), it can be assigned into Slots A-C, up to three "stuffs" in whatever order.
...mid level "stuff" (armor / Mod(B) type), it is limited to Slots B-C, up to two "stuffs" in whatever order.
...high level "stuff" or elemental affinities (helm / Mod(C) type), it is limited to Slot C.

edit:
Also have all the (C)Items above all (B)Items (in the F8 database) and all (B)Items above all (A)Items.
Just so that the player won't miss where some of the "stuff" goes in case the first 12 items shown are (A)Items and the rest is further down the list in that equip pool window thingie.

edit²:
Sure, it wouldn't be an item ranking system exactly like... erm, lack of examples... Dissidia FF?
Meaning you can't equip 2 (B)Items and 1 (C)Item at the same time.
well, luckly for you I don't have a brother, so... just kidding :P i see your point, really. If i had more time to spare i would try and learn some c++ myself.

author=bugmenot
However, there is an easy way you could think about:
[QuickPatches]
Armor(Slot#2)=4B7A84,98,4B7A9C,02,4B8124,09,4B81B2,06,4B82BC,09,4B834A,06
Armor(Slot#2+4)=4B7A88,98,4B7AA4,02,4B8137,09,4B81BE,06,4B82CF,09,4B8356,06

Replace the old Armor(Slot#2) and Armor(Slot#2+4) lines with these new ones.
(add ,49EF72,20,49EF2C,20 behind one of the QuickPatches if you are too lazy to rename all slots into the same vocabulary)

Shield type equipment fits into Slot#2, Slot#3, Slot#4
Armor type equipment fits into Slot#3, Slot#4
Helm type equipment fits into Slot#4


Rename the equipment vocabulary:
Slot#2 = Mod(A)
Slot#3 = Mod(B)
Slot#4 = Mod(C)

So if you give the player some:
...low level "stuff" (shield / Mod(A) type), it can be assigned into Slots A-C, up to three "stuffs" in whatever order.
...mid level "stuff" (armor / Mod(B) type), it is limited to Slots B-C, up to two "stuffs" in whatever order.
...high level "stuff" or elemental affinities (helm / Mod(C) type), it is limited to Slot C.

edit:
Also have all the (C)Items above all (B)Items (in the F8 database) and all (B)Items above all (A)Items.
Just so that the player won't miss where some of the "stuff" goes in case the first 12 items shown are (A)Items and the rest is further down the list in that equip pool window thingie.


that's actually a great workaround itself, i can totally go with this, thanks :)