EasyRPG / Player

RPG Maker 2000/2003 and EasyRPG games interpreter
https://easyrpg.org/player/
GNU General Public License v3.0
965 stars 183 forks source link

DirectMenuPatch #3192

Closed florianessl closed 1 month ago

florianessl commented 4 months ago

Implementation for the DirectMenuPatch for RM2k(3) as described in Makerpendiums patch database: https://dev.makerpendium.de/docs/patch_db/main-en.htm?page=direct_menu

This patch is enabled by adding the following line to the [Patch] section in EasyRPG.ini DirectMenu=[VariableId]

Additionally the "OpenMainMenu" command is extended to mirror the same functionality. (If both variants are used, scenes set via command parameter take priority) 1st param: scene id 2nd param: party member id or actor id 3rd param: 0: party member id is used, 1: db actor id is used

Default var ids for this patch are V3326 & V3327

EDIT: It should be noted that in this implementation scene id 4 (Status) also works for RM2K and not just 2k3 engine type games.

Ghabry commented 2 months ago

I will redo the API of these scenes to take an array of actors instead. Your solution works but lets improve it while we are at it (these scenes are around 10 years old, everything a bit dated ^^)

Ghabry commented 1 month ago

Rebased and updated the API...

About your extension to the Open Menu event command: I think this should get "ValueOrVariable" support so you can do indirection through it. (otherwise it has less functionality than the patch).

Ghabry commented 1 month ago

I will remove this part for now to make the PR-merge ready.

    if (Player::HasEasyRpgExtension() && com.parameters.size() > 1) {
        subscreen_id = com.parameters[0];

        if (com.parameters.size() > 1) {
            actor_index = com.parameters[1];
        }
        if (com.parameters.size() > 2 && com.parameters[2]) {
            is_db_actor = true;
        }
    }

I'm in favour of this but imo it needs some extensions for the full potential:

Ghabry commented 1 month ago

Honestly this redirection of the menu invocation is so useful that it must become a real feature later.