Recent Posts

Pages: [1] 2 3 ... 10
1
General Jo Engine Help / Questions about storyboard animations
« Last post by Cobra! on August 22, 2019, 05:48:27 pm »
I've been getting into the Jo engine, and think I'm finally getting somewhere, but I'm stuck on animating my player.

I'm trying to get the gun to go down then up to simulate shooting but the problem is, it only plays once, how do I make the animation stop and then restart? Here's the code, by the way.

Another thing is can I animate anything other than the transform of an object? Can I animate certain values or have callbacks?

Thanks in advance,

2
Have you made sure you're using the latest version of mednafen? Loop functionality works perfectly for me and I use mednafen.

Also, are your wav files 16 bits or 32 bits? 16 Bit files are supported on Saturn, but 32 Bit files are not. Just check to make sure. :)

Hi @LackofTrack, thanks for your answer.

About mednafen, yes, I'm using the latest version but my wav files are 32bits, maybe this is the problem. I'm going to try it again with a 16bit files.

Thanks!
3
Have you made sure you're using the latest version of mednafen? Loop functionality works perfectly for me and I use mednafen.

Also, are your wav files 16 bits or 32 bits? 16 Bit files are supported on Saturn, but 32 Bit files are not. Just check to make sure. :)
4
Hello there,

At present, I'm working in some audio test with joengine. My idea is put in a certain moment a track (as CDDA) in bucle in the game. I get an audio from a original sound track of a game and converted from MP3 to WAV in 44100Hz, stereo and 32bits format.

I reproduce the track in the game with jo_audio_play_cd_track function.
Code: [Select]
jo_audio_play_cd_track(2, 2, 1);

As you can see, the 3th parameter is 1 (true) so the function should put it on loop, but when I run the game the track never put in bucle. Stops at the end and never reproduce it again.

I must say that i run the game on emulator, in mednafen that is the only one that run Saturn games with tracks. I never use this on real hardware. Should be the problem?

Regards,
5
General Jo Engine Help / Re: Removing images/sprites from RAM?
« Last post by KeiDash on July 12, 2019, 12:28:16 pm »
Researching the case, I'm not solved yet but I found the piece of code that making the game crashes.

I have 3 background images of 320x240 pixels hardcoded (converted to C with JoMapEditor)

If I use 2 of them, the game works fine but if I load more of 2 of them, the games crashes, Regardless of whether you used it or not or the life cycle of the code reaches the loading point.


I have 2 methods, jo_main() and testbg(). In jo_main() I'm doing this:

Code: [Select]
void jo_main(void)
{
    jo_core_init(JO_COLOR_Black);

    currentScreen = 0;

    jo_core_run();
   
}

And in the method testbg I'm doing this:
Code: [Select]
void testbg()
{
    static unsigned int myscreen = 0;
    static int counter = 0;

    jo_img bg1;
    jo_img bg2;
    jo_img bg3;

    if(displayed == 0)
    {
        displayed = 1;

        bg1.width = 320;
        bg1.height = 240;
        bg1.data = (unsigned short *)BG1;

        bg2.width = 320;
        bg2.height = 240;
        bg2.data = (unsigned short *)BG2;

        bg3.width = 320;
        bg3.height = 240;
        bg3.data = (unsigned short *)BG3;
    }
}

If you look at the code, I'm not calling the method testbg() on jo_main(). In spite of this, if I write the 3th image code, the game crashes
Code: [Select]
        bg3.width = 320;
        bg3.height = 240;
        bg3.data = (unsigned short *)BG3;

But if I coment it, the game works fine.
Code: [Select]
        /*bg3.width = 320;*/
        /*bg3.height = 240;*/
        /*bg3.data = (unsigned short *)BG3;*/

And I repeat, I'm not calling to the testbg method.

The image arrays (BG1, BG2 and BG3) it's on one file called bgMain.h (#include "bgMain.h"), that contanis the 3 images exported with JoMagEditor to C. (PNG file to C)

I thought that the problem was the BG3 array maybe, so I made another different and I replace it but still happening the same.

So please, someone know what I'm doing wrong?

Maybe the problem is the size of exported images indepent of they was loaded?

Thanks
6
General Jo Engine Help / Removing images/sprites from RAM?
« Last post by KeiDash on July 10, 2019, 09:33:54 am »
Hi again,

I'm working around 2 weeks with JoEngine and I think that is a good framework to develop games for SS, I Like it and I think that it's so easy to use.

I've just been using BennuGD port for Dreamcast and I leave it for all problems with the audio and the Ram memory management.

When I began with JoEngine, I decide first do some test divided in output text, audio test, gamepad test, image/sprite test and save/load state test, so I try  to merge all in the same project divided in screens, something very simple.

Each screen has its owns image background, vars, functionalities, messages, etc.

I did the output text screen with and background image, some text like date, autor, description, etc.

I'm doing the 3th screen that represents the display of sprite/images with animations, sprites, backgrounds etc.

Well, In this point I'm begin having problems with the game.

The first thing that I detect was that some text were not show and the game stops in the first screen (It worked properly before I made the 3th screen). This happened when I load one more sprite in the game and I assign this to a jo_img var. I tried free the memory and remove from memory all images that I don't use but I don't know really how to do it.

I think that it's possible that I'm loading all images and sprite in the wrong way or something that I'm doing with this images not is correct, for example:

As I say, each screen has its own background image. I'm doing this with this piece of code added in the core with jo_core_add_callback

Code: [Select]
void SetBackgroundByScreen()
{
    jo_img imgBackground;
    imgBackground.width = 320;
    imgBackground.height = 240;

    switch (currentScreen)
    {
        case SCREEN_MAIN:
            if(!enableBackground) { break; }

            enableBackground = true;
            imgBackground.data = (unsigned short *)BG1;

            jo_clear_background(JO_COLOR_Black);
            jo_set_background_sprite(&imgBackground, 0, 0);
            jo_free_img(&imgBackground);

            break;
        case SCREEN_OUTP:
           
            if(!enableBackground) { break; }

            enableBackground = true;
            imgBackground.data = (unsigned short *)BG2;

            jo_clear_background(JO_COLOR_Black);
            jo_set_background_sprite(&imgBackground, 0, 0);
            jo_free_img(&imgBackground);

            break;
        case SCREEN_SPRI:
       
            /* TODO*/

        default:
            enableBackground = false;
            imgBackground.data = JO_NULL;
           
            break;
    }

}

void jo_main(void)
{
   jo_core_init(JO_COLOR_Black);
   jo_core_add_callback(SetBackgroundByScreen);
   jo_core_run();
}


And in the screen 3, I'm loading some sprites (five in particular) with this piece of code:
Code: [Select]
void s_LoadSprites()
{
    static int sprLoaded = 0;
   
   /*
         load only once time
         sprLoading1st it's a global var
   */

    if(sprLoaded == 1)
    {
       return;
    }

    sprLoading1st.width = 48;
    sprLoading1st.height = 48;

    /*sprite 1*/
    sprLoading1st.data = (unsigned short *)sprLoading1;
    idSprLoading1st = jo_sprite_add(&sprLoading1st);
    sprLoading1st.data = JO_NULL;

    /*sprite 2*/
    sprLoading1st.data = (unsigned short *)sprLoading2;
    jo_sprite_add(&sprLoading1st);
    sprLoading1st.data = JO_NULL;
   
    /*sprite 3*/
    sprLoading1st.data = (unsigned short *)sprLoading2;
    jo_sprite_add(&sprLoading1st);
    sprLoading1st.data = JO_NULL;

    /*sprite 4*/
    sprLoading1st.data = (unsigned short *)sprLoading4;
    jo_sprite_add(&sprLoading1st);
    sprLoading1st.data = JO_NULL;
   
    animSprLoading1st = jo_create_sprite_anim(idSprLoading1st, 4, 2);
    jo_start_sprite_anim_loop(animSprLoading1st);

    /*sprite 5*/
    sprLoading1st.width = 24;
    sprLoading1st.height = 40;

    sprLoading1st.data = (unsigned short *)sprKen01;
    sprLoading1st.data = JO_NULL;

    sprLoaded = 1;
}

I must point out that the images are hardcore loaded. I was create it with the JoMapEngine and ported to C and included in the code.

At this point the game doesn't run. I have to remove several image/sprite loads for the game to work.

So please, I need help! What I'm doing wrong? How can I remove images and sprites and liberate it from ram? This is the real problem?

Regards,
7
General Jo Engine Help / Re: Best way to: Put an image background
« Last post by KeiDash on July 03, 2019, 09:05:34 am »
First of all, thank you so mutch about your explanation Mr.Ponut. Feels good when in the community the users help each other.

I think that I understod your explanation. I revice my code again and I found a mistake, something that you are talking about. I'm doing wrong the logic where the backgrounds it's loader because in each cycle of the process,

I'm erasing and load again the background in each cycle and I'm sure that this provoque (as you say) an out of memory exception. I change my code and now the bg it's loaded one time only using the same jo_img var, using the same pointer because the bg's has the same weight and height.

On the other hand, I've changed the TGA image file for a converted image to .c with the JoMapEditor. In this case, the images was loaded more fast than physical files (logically..) on the screen and now I don't have any errors or out of memory exceptions. If someone are interested:

Code: [Select]
void SetBackgroundByScreen()
{

    jo_img bgImage;
    bgImage.data = JO_NULL;
    bgImage.width = 320;
    bgImage.height = 240;

    switch (currentScreen)
    {
        case SCREEN_MAIN:
            if(enableBackground != 0) { break; }

            enableBackground = 1;

            bgImage.data = (unsigned short *)BG1;

            jo_clear_background(JO_COLOR_Black);
            jo_set_background_sprite(&bgImage, 0, 0);
            jo_free_img(&bgImage);

            break;
        case SCREEN_OUTP:
            if(enableBackground != 0) { break; }

            enableBackground = 1;

            bgImage.data = (unsigned short *)BG2;

            jo_clear_background(JO_COLOR_Black);
            jo_set_background_sprite(&bgImage, 0, 0);
            jo_free_img(&bgImage);

            break;
        default:
            enableBackground = 0;
            bgImage.data = JO_NULL;
           
            break;
    }

}


8
Jo Engine Wish List / 8 Bit TGA Support?
« Last post by LackofTrack on July 02, 2019, 07:37:10 am »
Could we get 8 Bit TGA support along with 8 Bit versions of functions like jo_sprite_add_image_pack and such?

8 Bit image support isn't as in depth as 16/24 Bit support is right now. It will help make it easier to conserve RAM and space on the iso itself.

I know Xl2's 4 Bit Image Converter exists and while it is a great tool, to be honest 16 colors is a little to limiting for me.

Thanks for reading!

9
General Jo Engine Help / Re: Best way to: Put an image background
« Last post by ponut64 on July 01, 2019, 04:31:26 pm »
It's possible that one or another of jo engine's memory pointers are going out of range when you repeat this much.

It may not be in the documentation, but it is definitely in the source code.

Upon review, every call of jo_tga_loader will malloc.
It is true that jo_free_img is supposed to clear this. But, it is important you ensure that this function never repeats on a pointer unless that pointer is allocated.

There's also the issue of runtime performance.
The file system expects a system halt. You could try putting a while loop on tga loader and jo_free calls. This isn't for a logical reason, instead it is for the reason that the SH2 will cache instructions up to a conditional jump, could be causing problems.

Another thing is that upon review, jo_tga_loader should work fine loading different files (as long as the first file is the maximum image size you'll use) to the same image data region without being free'd. img->data is never treated with an incremental pointer; none is stored except in for loops. jo_free_img destroys the pointer and points img->data to NULL. That can cause errors if it's ever used out of order.

Why would it ever be used out of order?
VDP2 and Slave SH2 don't halt where Master SH2 halts.
Also, potentially compiler errors.

I've also had success clearing up file system errors by disassociating file names. IMG1 and IMG2 could be too similar and subtle memory corruptions that "just happen" with Jo engine make the code confused. It's possible that IM  .TGA is expressing that the text "G1" and/or "G2" were corrupted into illegal text codes. I suggest you specify "IMD1" and "IBG2" or something like that.

I will say that whatever Yabause is doing, ignore it. It's most likely wrong.
Trust Mednafen.
10
About you / Re: Hello there!
« Last post by KeiDash on July 01, 2019, 12:40:51 pm »
Oops

hehehe no problem ponut64, you didn't have to know.

We'll see on the discord channel.
Pages: [1] 2 3 ... 10
SMF spam blocked by CleanTalk