Bitmap Effects

Discussion in 'RGSS Scripts (RMXP)' started by muramasa, Nov 3, 2018.

  1. muramasa

    muramasa Abomination of life, or life itself. Veteran

    Messages:
    581
    Likes Received:
    293
    Location:
    CR
    First Language:
    Spanish
    Bitmap Effects
    By Orochii Zouveleki
    RGSS1, tested with RGSS102J.dll

    INTRODUCTION
    I started doing modifications to a friend's DLL code, and I ended up doing this. Basically, it's a transparency effect. It includes a basic masking for any bitmap by using another bitmap's alpha channel, as well as a more complicated and somewhat powerful scrollable alpha masking using RGB components as alpha layers. It's kind of complicated to explain, but it lets you make something like this.

    [​IMG]
    To the left, a sprite with some kind of animated outline. To the right, a single background with both scrolling alpha and static alpha layers.

    CODE
    http://share.cherrytree.at/showfile-31871/ozwbitmapextensions.zip
    Right now all comments are in Spanish, I need to reupload it in English later. This download includes the necessary DLL, the source code for the DLL, and the wrapping code for using it in RGSS. It also includes an implementation for its easy use with Sprite. Something pretty similar can be done with Plane, but I haven't made it. You're free to do so.

    COMPILING THE DLL
    Any IDE should work, but just as reference I used Code::Blocks along with the GCC compiler that comes with it (version 4.7.1 if I recall correctly). Just install and open Code::Blocks, create a DLL project from it, throw the code there and you're good to go.

    INSTRUCTIONS
    New properties for Sprite class:
    - @sprite.alpha_mask : a bitmap to be used as alpha mask.
    - @sprite.alpha_mask_kind : 0 for simple mode, 1 for composite mode.
    - @sprite.alpha_mask_sx : horizontal scrolling speed for the scrolling layer.
    - @sprite.alpha_mask_sy : vertical scrolling speed for the scrolling layer.

    AVAILABLE METHODS
    Use these arbitrarily with any bitmap in order to apply alpha masking effects.
    BUILDING A COMPOSITE MASK
    A composite mask uses the R G and B channels sepparately for different effects. Each one of them have simple but very distinct properties.
    R is the base alpha mask.
    G is multiplied by R, which means if an spot in G is zero, it will result in zero.
    B is added to R*G, which means it works as a threshold.

    Another thing to keep in mind is that G can be scrolled by manipulating sx and sy at the compositeMask method. This is done automatically while updating the sprite by using the property implementation.

    Here is an example of the alpha mask used for the example above
    [​IMG] -> [​IMG]

    The image to the right consists of three grayscale images (shown to the left), joined together as a single image, each in a different color channel. Use Photoshop or GIMP or any program with the option to manipulate sepparate channels in order to do this.

    LICENSE
    MIT License.

    Have a nice day. :^)
     
    Last edited: Nov 3, 2018
    #1
    Heretic86 and luzi like this.
  2. TheoAllen

    TheoAllen Self-proclaimed jack of all trades Veteran

    Messages:
    4,367
    Likes Received:
    4,934
    Location:
    Riftverse
    First Language:
    Indonesian
    Primarily Uses:
    RMVXA
    Since this use external dll, can I assume it will works in other version of RGSS?
     
    #2
  3. muramasa

    muramasa Abomination of life, or life itself. Veteran

    Messages:
    581
    Likes Received:
    293
    Location:
    CR
    First Language:
    Spanish
    Yes it does. I actually use it on my game, which uses RGSS3 binaries to XP adaptation thing, and works smoothly there. Which pretty much means it works in RGSS3, and should work in RGSS2 (but I don't have old VX).

    Salut!
     
    #3
    TheoAllen likes this.
  4. ZirconStorms

    ZirconStorms VX & VX Ace Scripts Veteran

    Messages:
    321
    Likes Received:
    104
    First Language:
    English
    Primarily Uses:
    RMVXA
    Struggling to understand how to bring a simple mask up for picture sprites displayed on the map/in-game.
    Fairly sure this would be done using script calls, but...
     
    #4
  5. muramasa

    muramasa Abomination of life, or life itself. Veteran

    Messages:
    581
    Likes Received:
    293
    Location:
    CR
    First Language:
    Spanish
    Just realized there was a reply to this. Yeah, this is a scripting library, which means you can implement that by yourself in case you want, and use this code as you wish, AND distribute it freely or whatever (all under MIT which means do as you want).

    But I'm not going to implement any specific thing because I'm lazy. So yeah, sorry. :)
     
    #5

Share This Page