Street fighter 89

In Progress Street Fighter 89 The Final Fight by Machok v3.7

No permission to download
The project is currently under development.
Some small details I'd like to point out, Try to randomise the lighting if its going to be a constant feature throughout the stage, it feels too much in rhythm, also create a thunder sound effect to go with the randomised lighting, @1:22 you can see clipping of the lightning on the left side.

Nice work so far, it's really good to see you've decided to evolve the gameplay and mechanics.
 
Some small details I'd like to point out, Try to randomise the lighting if its going to be a constant feature throughout the stage, it feels too much in rhythm, also create a thunder sound effect to go with the randomised lighting,
randomise the lighting? You mean like 60 degree angle?
Danno if you have nice rain sprites please let me know

@1:22 you can see clipping of the lightning on the left side.

Nice work so far, it's really good to see you've decided to evolve the gameplay and mechanics.
very sharp eyesight :cool:
I tried but somehow can't make the spawn position more to the left, because I use both scrollx and scrollz at the same time?
 
randomise the lighting? You mean like 60 degree angle?

In the stage the lighting flashes every 5 seconds, by randomising I mean make it flash 4 seconds, then 10 seconds, then 30 seconds then 46 seconds, then 3 seconds etc

I tried but somehow can't make the spawn position more to the left, because I use both scrollx and scrollz at the same time

use spawn relative to screen position and make sure the lightning is big enough to pass the screens visible area to match your scrolling

C:
void spawnscreen(void vName, float fX, float fZ, void Alias, int iDirection)
{
   //spawnscreen (Generic spawner with alias and relative to screen)
   //Spawns entity next to caller.
   //vName: Model name of entity to be spawned in.
   //fX: X location adjustment.
   //fZ: Y location adjustment.
        //fY: Z location adjustment.
   void self = getlocalvar("self"); //Get calling entity.
   void vSpawn; //Spawn object.


   clearspawnentry(); //Clear current spawn entry.
   setspawnentry("name",vName); //Acquire spawn entity by name.
 
   vSpawn = spawn(); //Spawn in entity.


   changeentityproperty(vSpawn, "position",openborvariant("xpos")+fX, openborvariant("ypos")+fZ, 0); //Set spawn location.
   if(iDirection){changeentityproperty(vSpawn, "direction", iDirection);} //Set direction.
   if(Alias){changeentityproperty(vSpawn, "name", Alias);} //Set Alias to spawned entity
   changeentityproperty(vSpawn, "parent", self);
   return vSpawn; //Return spawn.
}
 
In the stage the lighting flashes every 5 seconds, by randomising I mean make it flash 4 seconds, then 10 seconds, then 30 seconds then 46 seconds, then 3 seconds etc



use spawn relative to screen position and make sure the lightning is big enough to pass the screens visible area to match your scrolling

C:
void spawnscreen(void vName, float fX, float fZ, void Alias, int iDirection)
{
   //spawnscreen (Generic spawner with alias and relative to screen)
   //Spawns entity next to caller.
   //vName: Model name of entity to be spawned in.
   //fX: X location adjustment.
   //fZ: Y location adjustment.
        //fY: Z location adjustment.
   void self = getlocalvar("self"); //Get calling entity.
   void vSpawn; //Spawn object.


   clearspawnentry(); //Clear current spawn entry.
   setspawnentry("name",vName); //Acquire spawn entity by name.
 
   vSpawn = spawn(); //Spawn in entity.


   changeentityproperty(vSpawn, "position",openborvariant("xpos")+fX, openborvariant("ypos")+fZ, 0); //Set spawn location.
   if(iDirection){changeentityproperty(vSpawn, "direction", iDirection);} //Set direction.
   if(Alias){changeentityproperty(vSpawn, "name", Alias);} //Set Alias to spawned entity
   changeentityproperty(vSpawn, "parent", self);
   return vSpawn; //Return spawn.
}

@machok and @danno,

If I may, why use models at all? Run this function in a level update, and it will generate randomized lightning flash effects adapted to your screen size. The lightening has transparency and randomized high speed color cycyling to give it a more appealing strobe effect. It will also attempt to play a thunder sound (you will need to supply one). Adjust the #define values to suit your tastes.

C-like:
/*
* Caskey, Damon V
* 2020-09-04
*
* Simulate a lightning flash at random intervals.
*/
void dc_lightning_flash()
{
    #define DC_LF_FLASH_WAIT_MIN 0            // Minimum time between lightning occurrence.
    #define DC_LF_FLASH_WAIT_MAX 4000        // Maximum time between lightning occurrence.
    #define DC_LF_POSITION_X 0
    #define DC_LF_POSITION_Y 0
    #define DC_LF_POSITION_Z 1000
    #define DC_LF_FLASH_BLEND 1

    #define DC_LF_FLASH_COLOR_WHITE        rgbcolor(255, 255, 255)
    #define DC_LF_FLASH_COLOR_YELLOW    rgbcolor(255, 255, 153)
    #define DC_LF_FLASH_COLOR_BLUE        rgbcolor(153, 204, 204)

    #define DC_LF_FRAME_0_DELAY 40
    #define DC_LF_FRAME_1_DELAY DC_LF_FRAME_0_DELAY + 64
    #define DC_LF_FRAME_2_DELAY DC_LF_FRAME_1_DELAY + 24

    int elapsed_time = openborvariant("elapsed_time");
    int time_point = getlocalvar("dc_lf_time");
    int time_differential = 0;
    int box_size_x = 0;
    int box_size_y = 0;
    int box_color = 0;
 
    /*
    * If time temp is empty, initialize it to current
    * elapsed time. Then get difference between time
    * point vs. current elapsed time.
    */

    if (typeof(time_point) != openborconstant("VT_INTEGER"))
    {
        time_point = elapsed_time;
        setlocalvar("dc_lf_time", time_point);
    }

    time_differential = elapsed_time - time_point;

    /*
    * If the time difference is negative, we are in the
    * interval between animations. Exit and do nothing.
    */

    if (time_differential < 0)
    {
        return;
    }

    /*
    * Now take action based on time. We're actually just
    * choosing colors for the drawbox function. By cycling
    * through certain color sets, we get an initial flash,
    * then a strobing effect, and finally a lingering light
    * that closely approximates a lightning strike.
    */

    if (time_differential < DC_LF_FRAME_0_DELAY)
    {
        /*
        * Play thunder sound if we aren't already.
        */

        int playid = getlocalvar("dc_lf_playid");
        int sample_id = loadsample("data/sounds/custom/thunder_0.wav");

        if (typeof(playid) == openborconstant("VT_INTEGER"))
        {
            if (querychannel(playid) == -1)
            {
                playsample(sample_id, 0, 120, 120, 100, 0);
                playid = openborvariant("sample_play_id");

                setlocalvar("dc_lf_playid", playid);
            }
        }
        else
        {
            playsample(sample_id, 0, 120, 120, 100, 0);
            playid = openborvariant("sample_play_id");

            setlocalvar("dc_lf_playid", playid);
        }

        box_color = DC_LF_FLASH_COLOR_WHITE;
    }
    else if (time_differential >= DC_LF_FRAME_0_DELAY && time_differential < DC_LF_FRAME_1_DELAY)
    {
        /* Randomly switch between blue and yellow. */

        dc_d20_set_range_min(0);
        dc_d20_set_range_max(1);

        if (dc_d20_random_int())
        {
            box_color = DC_LF_FLASH_COLOR_BLUE;
        }
        else
        {
            box_color = DC_LF_FLASH_COLOR_YELLOW;
        }
    }
    else if (time_differential >= DC_LF_FRAME_1_DELAY && time_differential < DC_LF_FRAME_2_DELAY)
    {
        box_color = DC_LF_FLASH_COLOR_BLUE;
    }
    else
    {
        /*
        * Animation is finished.
        *
        * If elapsed time is divisible by 100, then
        * reset time point to empty. This gives us a
        * slight chance of immediately looping back
        * and instantly doing another lightning strike.
        * We also delete the play ID that prevents thunder
        * overlap so a second thunder sound can play.
        * Just like real storms occasionally producing
        * a crescendo of lightning.
        *
        * Otherwise set the time point to be a randomized
        * period ahead of current elapsed time. This will
        * cause time differential to be negative until current
        * elapsed time catches up, giving us an interval
        * between lightning strikes.
        */

        if (elapsed_time % 100 == 0)
        {
            time_point = NULL();
        }
        else
        {
            dc_d20_set_range_min(DC_LF_FLASH_WAIT_MIN);
            dc_d20_set_range_max(DC_LF_FLASH_WAIT_MAX);

            time_point = elapsed_time + dc_d20_random_int();
        }     

        setlocalvar("dc_lf_time", time_point);
        setlocalvar("dc_lf_playid", -1);

        box_color = DC_LF_FLASH_COLOR_BLUE;
    }

    /*
    * Draw the box to create lightning effect.
    */

    box_size_x = openborvariant("hresolution");
    box_size_y = openborvariant("vresolution");

    drawbox(DC_LF_POSITION_X, DC_LF_POSITION_Y, box_size_x, box_size_y, DC_LF_POSITION_Z, box_color, DC_LF_FLASH_BLEND);

    return;

    #undef DC_LF_FLASH_WAIT_MIN
    #undef DC_LF_FLASH_WAIT_MAX
    #undef DC_LF_POSITION_X
    #undef DC_LF_POSITION_Y
    #undef DC_LF_POSITION_Z
    #undef DC_LF_FLASH_BLEND

    #undef THUNDER_DIFFERENTIAL

    #undef DC_LF_FLASH_COLOR_WHITE
    #undef DC_LF_FLASH_COLOR_YELLOW
    #undef DC_LF_FLASH_COLOR_BLUE

    #undef DC_LF_FRAME_0_DELAY
    #undef DC_LF_FRAME_1_DELAY
    #undef DC_LF_FRAME_2_DELAY
}

Here's what it looks like in action:


HTH,
DC
 
In the stage the lighting flashes every 5 seconds, by randomising I mean make it flash 4 seconds, then 10 seconds, then 30 seconds then 46 seconds, then 3 seconds etc
Nice idea will do that

use spawn relative to screen position and make sure the lightning is big enough to pass the screens visible area to match your scrolling
it turns out my rain entity is npc type not none type so that's why it couldn't pass through the wall to get the exact coordinate 😱
just realize this after your spawnscreen script also not working, my mistake 🤭



@DCurrent
Script is crash, to be honest not really sure how to use it
I just put it like this
Code:
updatescript     data/scripts/updatelevel/dc_lightning_flash.c
 
so, what do you suggest? Take in note that the bright colors are due of the heavy lighting on the ceiling, so still works. Outside is evening/night and inside is fully lit.
ah, I am not talking about the inside of the temple, but outside, like this part.
See how bright the wall is, in contrast with the pale purple of the sky.
1673554640043.png
It doesn't match - looks like there is a strong and warm source of light lightning that wall.

The same happens here, a bit less strong:
1673554710796.png

Think about the temperature of the light, the mood of the illumination. When sky is redish/purpleish, it paints everything with shades of that color.
 
ah, I am not talking about the inside of the temple, but outside, like this part.
See how bright the wall is, in contrast with the pale purple of the sky.
View attachment 2814
It doesn't match - looks like there is a strong and warm source of light lightning that wall.

The same happens here, a bit less strong:
View attachment 2815

Think about the temperature of the light, the mood of the illumination. When sky is redish/purpleish, it paints everything with shades of that color.
Makes sense, yes.
But I would say only the first really need a tweak of color.
The 2nd is ok.

or
I would tweak the upper sky color instead... also perhaps avoiding to have the darker purple "limit" alligned with golden barrier height...
 
Let's keep it fresh in term of colors. :)

I always try to mix up matching colors, but not too similar colors. In my artworks and color comics.
Exemple : red clothes will have purple shadding.
Orange clothes will have more reddish shadding.
And when coloring a forest, I will try to use different types of green :
-some more yellowish
-some more blue-ish

It gives some kind of dynamism of color. Not sure if it make sense in english. :D

EDIT : lazy tweaking... just for fun... (very lazy edit in the right)
___sel01.gif___sel01-.gif
 
Last edited:
@NED you want to look at the file?
I'm not sure I have the patience to work on the source one ^^;
If I remember well, it's from FF Gold.
I did this "edit" with selections and manual color + hue edit.
But It would take longer to me to edit the actual different layers of the source mod.

But if you need it, don't hesitate to take these colors as a reference, or perhaps Don Vecta can tweak it.
 
I'm not sure I have the patience to work on the source one ^^;
If I remember well, it's from FF Gold.
I did this "edit" with selections and manual color + hue edit.
But It would take longer to me to edit the actual different layers of the source mod.

But if you need it, don't hesitate to take these colors as a reference, or perhaps Don Vecta can tweak it.
I might do a recolor later on, something with better shades
 
I'm not sure I have the patience to work on the source one ^^;
If I remember well, it's from FF Gold.
I did this "edit" with selections and manual color + hue edit.
But It would take longer to me to edit the actual different layers of the source mod.

But if you need it, don't hesitate to take these colors as a reference, or perhaps Don Vecta can tweak it.
I might do a recolor later on, something with better shades

Thank you so much guys, I usually tweak it myself
it's just that I'm still working on Haggar too. Adding new sprites takes up a bit of my time
Not to mention that after that I need to apply it to the new mechanics (which means, trial and error)

Untitled-1.jpg
 
Thank you so much guys, I usually tweak it myself
it's just that I'm still working on Haggar too. Adding new sprites takes up a bit of my time
Not to mention that after that I need to apply it to the new mechanics (which means, trial and error)


Wait! You're making these sprite edits based on Slamamsters sprites, I mean by yourself?
THis is great!!
 
Not bad. You are correcting colored outlines around his sprite(s). Great job! It's time for an elbow drop! 😆
Wait! You're making these sprite edits based on Slamamsters sprites, I mean by yourself?
THis is great!!
Thanks!! like it or not I need to do it 😵
this is exactly what I'm worried about when I wanted to add new movements

@NED after getting the new mechanic I hope to get similar sprites for maki 🥳
 
@machok Don't worry. I'll help you with Maki.
Also, When your Haggar sprites are done. I can fix some small errors.
(I think some elements can be tweaked in head area) - Hard to explain, But I sure can fix it easily. :)

When your new mechanics are ready, you can PM me about your sprites needs for Maki, and I can create you a custom sequence of attacks.

Do you plan to add special moves to the characters? (I mean for the extra game mode)
Such as F, F, A or D, U, A or D, F, A...
I think FF characters can have very interesting moves... (And again, I can help here, depending on the complexity of moves you aim for)
 
Back
Top Bottom