New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support "Maniac Patch" by BingShan #1424

Open
Ghabry opened this Issue Sep 29, 2018 · 9 comments

Comments

Projects
None yet
3 participants
@Ghabry
Member

Ghabry commented Sep 29, 2018

Download: https://ux.getuploader.com/xingqier/download/115

This patch has two incompatible changes:

  • The variable range is increased from 9999999 to full 4 byte (but still not overflowing)
  • Event execution is not evaluated after switch/variable change but when the frame ends

Machine translated help file

    ● Audio:
        It corresponds to playing ogg / vorbis.
        * The LOOPSTART and LOOPLENGTH tags that are proprietary standards after VX are also effective.
        * BGM is streaming, SE is batch loading and it is wav and cached.
        * There is a problem that the seek does not go well with the specific encoded file and loop playback can not be performed.
        Confirmed only with the material of Demon King soul at the present moment. Through FOLE (http://ficusel.com/) you can play it.
  
    ● Text:
        You can now send sentences with mouse clicks.
        It also supports choices.

◆ Additional command:
    @> Get Save Info: (ID: 3001)
    @> Get save information:
        This command gets the same information as the content displayed on the default load screen.
        Store date, time, level, HP as a variable, and face graphics in a picture.
        Currently we do not correspond to the name of the character.
        
        If saved data does not exist, 0 is stored in the variable for the date.
        
        Face graphics are treated as 4 * 4 sprite sheets.
        Therefore, if it is a file with more than 16 patterns arranged, the display will be misaligned.
        Conversely if it can be divided into 4, it does not matter even if it is out of the standard.
        
        Pictures are exactly the same as the original settings except files and sprite sheet related items.
        Please use the target picture number before going out of the screen in advance or make it transparent.
        
        Even in the English version, the order of year, month, day (YYMMDD) is the same.

        String Argument: None
        Numeric argument:
            00: How to specify save number (0: constant 1: variable)
            01: save number
            02: Variable to receive Save Year Month Date (YYMMDD)
            03: Variable to receive save time (HHMMSS)
            04: Variable that receives the level of the first character
            05: Variable to receive the HP of the first character
            06: Reserved item (fixed to 0)
            07: Picture number specification method (0: constant 1: variable)
            08: Picture number to receive face graphic of member 1 (first character)
            09: Picture number to receive member 2 face graphics
            10: Picture number to receive member 3 face graphics
            11: Picture number to receive member 4 face graphics

    @> Save: (ID 3002)
    @> Execute Save:
        This is the same command as the default save function.
        Save number 0 or less can not be used.

        Optionally you can store the execution result in a variable.
        The value will be 1 on success and 0 on failure.
        Attention is necessary because assignment to a variable is done after executing save.
        
        
        String Argument: None
        Numeric argument:
            00: How to specify save number (0: constant 1: variable)
            01: save number
            02: Whether to accept success or failure of saving (0: not received 1: received)
            03: Variable to receive success / failure
 
    @> Load: (ID 3003)
    @> Execute load:
        This command is equivalent to the default load function.
        You can not use save number 0 or less (operation is ignored).
        
        There is a function to check the file before executing as an option and interrupt the load if the result is incorrect.
        Check processing is equivalent to "Get save information" command.
        If you surely have the correct file, you can disable it, but we do not recommend it.
        
        
        String Argument: None
        Numeric argument:
            00: How to specify save number (0: constant 1: variable)
            01: save number
            02: Presence / absence of pre-execution check (0: valid 1: invalid)
            
    
    @> End Load Process: (ID 3004)
    @> End of loading process:
        This is a command to release the dark state after loading.
        
        It is invalid in the new game. In addition, the dark rotation is released naturally after one frame elapses.
        
        
        String Argument: None
        Numeric argument: none

    @> Get Mouse Position:  (ID 3005)
    @> Get mouse coordinates:
        Command to get the relative position of the mouse in the window.
        Based on 320 * 240 resolution.
        
        * Values ​​can not be handled correctly when DirectDraw is specified in the full screen state and rendering method.
        (There is probably no problem as there are currently few machines on which this setting is valid.)

        String Argument: None
        Numeric argument:
            00: Variable to receive X coordinate
            01: Variable to receive Y coordinate
    
    @> Set Mouse Position: (ID 3006)
    @> Setting mouse coordinates:
        This command sets the relative position of the mouse in the window.
        Based on 320 * 240 resolution.
        To avoid incorrect click triggering, the X coordinate is rounded to 0 to 319, and the Y coordinate is rounded to 0 to 239.
        
        * Values ​​can not be handled correctly when DirectDraw is specified in the full screen state and rendering method.
        (There is probably no problem as there are currently few machines on which this setting is valid.)

        String Argument: None
        Numeric argument:
            00: Coordinate specification method (0: constant 1: variable)
            01: X coordinate
            02: Y coordinate
 
◆ Modify command:
    @> Picture display:
        Added blend mode (multiplication, addition, overlay) as a special effect.
        Added horizontal / vertical flipping function.
 
    @> Picture movement:
        Added blend mode (multiplication, addition, overlay) as a special effect.
        Added horizontal / vertical flipping function.
        When moving time is specified as a negative value, absolute value is handled in frame unit.
        (Normally specified value * 6 frames)

    @> Conditional branch:
        Added a judgment on whether it is right after loading.

    @> Key input processing:
        It corresponds to the input of the mouse (left / right middle click, wheel up / down scroll).
        Since the wheel scroll has no pressed state, it is effective only under the condition of "Wait until pressed".
  • Get Save Info (3001)
  • Save (3002)
  • Load (3003)
  • [x ] End Load Process (3004)
  • Get Mouse Position (3005)
  • Set Mouse Position (3006)
  • Picture: Blend Modes (Mul, Add, Over)
  • Picture: Flip Hor/Vert
  • Picture: Negative time offset for "frames"
  • Conditional Branch: Right after load
  • Key Input: Mouse left/right
  • Key input: Wheel Scroll up/down
@Ghabry

This comment has been minimized.

Member

Ghabry commented Sep 29, 2018

Conditional Branch:
captura

Key Input:
keyinput

Show/Move Picture:
pic

New event commands:
ecmd

Load
load

Save:
save1

GetSaveInfo:
save

GetMousePos
mousepos

SetMousePos
setmousepos

CC @20kdc

CC @CherryDT

@CherryDT

This comment has been minimized.

CherryDT commented Sep 29, 2018

Very surprised to see this. But it's nice that apparently someone figured out how my system for extending the UI works, and it's in my spirit - if I had time then half of these changes would be something I'd implemented as well :)

@CherryDT

This comment has been minimized.

CherryDT commented Sep 29, 2018

@Ghabry where did you find this? Is there some kind of community around it? How can I get in touch with the creator? Google didn't give me anything!

@Ghabry

This comment has been minimized.

Member

Ghabry commented Sep 29, 2018

@CherryDT
No idea where the community is, I reached them via twitter.

Author is BingShan (https://twitter.com/BingShan1024), afaik only speaks Japanese. You see all the development progress in the screenshots there.

For easier communication (German and English) try contacting jade_hpy: https://twitter.com/jade_hpy

@Ghabry

This comment has been minimized.

Member

Ghabry commented Sep 30, 2018

I added the event IDs, they range from 3001 to 3006.

@Ghabry

This comment has been minimized.

Member

Ghabry commented Oct 30, 2018

The way how the Key input is encoded is a bit strange because it recycles other parameters but by looking at the ones it uses I see some logic.
When the original checkbox is ticked the value becomes 3 (which means it's a bitfield)

Key Input:
Wheel down: Arg 10 = 2 (check_down)
Wheel up: Arg 13 = 2 (check_up)
Mouse left: Arg 3 = 2 (check_decision)
Mouse right: Arg 4 = 2 (check_cancel)
Mouse middle: Arg 9 = 2 (check_shift)

Show Picture:
Recycles the now unused "bottom transparency" (arg 14) setting as a bit field (seriously...) but the bit field starts at 256 which means it can't be confused with the transparency where the maximum value that makes sense is 255.

  • Blend Mode: Multiple: Bit 9 (256)
  • Blend Mode: Add: Bit 10 (512)
  • Blend Mode: Overlay: Bit 9 + 10 (768)
  • Flip H: Bit 13 (4096)
  • Flip V: Bit 14 (8192)
@Ghabry

This comment has been minimized.

Member

Ghabry commented Oct 30, 2018

Started working on this
https://github.com/Ghabry/easyrpg-player/tree/maniac-patch

Implements:

  • GetSaveInfo partially (Faces wrong, not loaded from FaceSet but Picture), No Timestamp parsing
  • Save
  • Load (but crashes because the interpreter is destroyed)
  • GetMousePosition (but the mouse has less latency then with Wine, implementation detail)
  • KeyInputProc: Mouse button and scroll wheel checking

Missing:

  • Conditional branch: Right after loading
  • Event: EndLoading, SetMousePosition
  • Picture: Negative time offset for "frames"
  • Picture: New blend modes/Flip
@fmatthew5876

This comment has been minimized.

Contributor

fmatthew5876 commented Oct 31, 2018

These all look like custom features I'd want to have in player even if they weren't modeling an RPG_RT.exe patch. 👍

@Ghabry

This comment has been minimized.

Member

Ghabry commented Oct 31, 2018

got the confirmation on Twitter that "EndLoadProcess" is currently not working as documented / is not really needed anymore which means the command can be ignored.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment