a technical look at PAlib_BgTrans and then trying to implement it on NFlib.

Deleted member 591971

Well-Known Member
OP
Member
Joined
Apr 10, 2022
Messages
216
Trophies
0
XP
922
Welcome to another episode of torturing myself for something that absolutely nobody has asked for.
I have been working on PA2lib PAlib sprite backwards compatibility, it has been painful and it still does not work tho. whatever nobody cares.


After wasting 80+ hours on the PAlib source code to see something that can help me on implementing sprite support onto PA2lib I remembered about PAlib's Bg Transition function, some people thinked this was bloatware, i found this useful on the past, that is why a customized version of PAlib (That does not have sh** like mode7 or PA_Nothing that makes me die of cringe.) is my main lib for creating nds stuff (plz do not kill me i just think it is better for me, i already tested NFlib and i didn't liked it.). Ok so at the time i was recreating my proyects on NFlib because i wanted to switch to NFlib (instant regret lol) and i got this crazy idea about implementing PAlib's bgtrans functions onto NFlib code, before you start dming me, in some ways PA2lib is renamed nflib (first version was almost NFlib with some changes) and if i implement this onto nflib it will be easy to implement it onto PA2lib + NFlib is more used and recommended than PA2lib so why not? It ended up wrong lol. I mean displaying corrupted graphics on the DS screen is already my job.

Here is the story if you wanna for some reason make the same thing.

1. A look at PAlib source code to understand.

if you ask me "how does PAlib bg transition stuff work?" I would normally respond "its just bg tilemap changing and that is it" but today i am gonna explain it all.

PAlib integrates some image called "PA_TransBg.png" and it has all the types of bgs that PAlib uses. It converts it using PAGfx and it is integrated onto the main lib.
onto the file (palib1007directory/source/PA_BgTrans.c there is the source for transbg i guess.
C:
#include <PA9.h>

#include "TransBg/all_gfx.h"

u8 pa_bg_trans[2];

void PA_InitBgTransEx(u8 screen, u8 bg) {
    pa_bg_trans[screen] = bg;
    PA_LoadBackground(screen, bg, &PA_TransBg);
    PA_BgTransUpDown(screen, 0, 0, TRANS_LENGTH); // Hide
}
whatever that files include the all_gfx of transbg which means that the transformed bg is being used.
C:
void PA_BgTransTile(u8 screen, u16 type, s16 x, s16 y, s16 temptile) {
    u16* map = (u16*) PA_TransBg.BgMap;
    PA_SetMapTileAll(screen, pa_bg_trans[screen], x, y, map[temptile*2+type]);
    PA_SetMapTileAll(screen, pa_bg_trans[screen], x + 1, y, map[temptile*2+1+type]);
    PA_SetMapTileAll(screen, pa_bg_trans[screen], x, y + 1, map[temptile*2+32+type]);
    PA_SetMapTileAll(screen, pa_bg_trans[screen], x + 1, y + 1, map[temptile*2+1+32+type]);
}

void PA_BgTransUpDown(u8 screen, u16 type, u8 vflip, s16 state) {
    int i, j;
    s16 tile = state >> 1;
    s16 temptile;
    int y;
    type = type << 6;
    int x;

    for (j = 0; j < 12; j++) {
        y = j * 2;

        if (vflip) y = (11 - j) * 2;

        temptile = tile;

        if (temptile > 15) temptile = 15; // limit range...

        for (i = 0; i < 16; i++) {
            x = i * 2;
            PA_BgTransTile(screen, type, x, y, temptile);
        }

        if (tile) tile--;
    }
}
If you know full libnds and PAlib then you understand, if you do not then basically, PA_BgTransTile is PA_SetMapTile which is modifying the current bg map. PA_BgTransUpDown basically uses that function to swap the current tiles, to a certain velocity so that it becomes a transation. there you go, if you don't understand or think that what i am saying is wrong please say it to me, i am not the best at explaining things.


2.Implementing it onto NFlib

I can't say anything but it does not work and it needs the PA_BgTrans.png file extracted from the PAlib source code. I found it under a customized version on NFlib because i do not like vanilla NFlib
C:
#include <stdio.h>
#include <nds.h>
#include <nf_lib.h>

u8 pa_bg_trans[2];

void PA_BgTransTile(u8 screen, u16 type, s16 x, s16 y, s16 temptile) {
    //i tried doing a for loop on here so that all y tiles are replaced and that didn't work so i insted let it like this
    NF_SetTileOfMap(screen, 0,x, 0,pa_bg_trans[0]);
}

void PA_BgTransUpDown(u8 screen, u16 type, u8 vflip, s16 state) {
    int i, j;
    s16 tile = state >> 1;
    s16 temptile;
    int y;
    type = type << 6;
    int x;

    for (j = 0; j < 12; j++) {
        y = j * 2;

        if (vflip) y = (11 - j) * 2;

        temptile = tile;

        if (temptile > 15) temptile = 15; // limit range...

        for (i = 0; i < 16; i++) {
            x = i * 2;
            PA_BgTransTile(screen, 0, x, y, temptile);
        }

        if (tile) tile--;
    }
}


void PA_InitBgTransEx(u8 screen, u8 bg) {
    pa_bg_trans[screen] = bg;
    NF_LoadTiledBg("PA_TransBg", "tras", 256,256);
    NF_CreateTiledBg(0,0,"tras");
    PA_BgTransUpDown(0, 0, 0, 70); // Hide
}

int main(int argc, char **argv) {
    NF_Set2D(0, 0);
    NF_Set2D(1, 0);  
    consoleDemoInit();
    iprintf("\n NitroFS init. Please wait.\n\n");
    iprintf(" Iniciando NitroFS,\n por favor, espere.\n\n");
    swiWaitForVBlank();

    NF_SetRootFolder("NITROFS");  

    NF_Set2D(0, 0);              
    NF_Set2D(1, 0);
    s32 i = 0;
    NF_InitTiledBgBuffers();  
    NF_InitTiledBgSys(0);      
    NF_InitTiledBgSys(1);
    NF_LoadTiledBg("nfl", "nfl", 256, 256);
    NF_CreateTiledBg(0, 3, "nfl");
    PA_InitBgTransEx(0,0);

    s32 height = 0;
    for (i = 32; i >= 0; i--) {
        PA_BgTransUpDown(0,0,0,i);
        NF_UpdateVramMap(0,0);
        swiWaitForVBlank();
    }
    while(1){
        swiWaitForVBlank();
    }
    return 0;
}
now goodbye, i already tortured myself enough. pa2lib is probably gonna get discontinued because of time and school.
edit: i am not asking for help, this is just if someone ever needs this
 
  • Like
Reactions: YuseiFD

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
  • BigOnYa @ BigOnYa:
    And real f ing high! But not the height. We got legal recreation now, so yea...
    +2
  • BakerMan @ BakerMan:
    you go bro
    +1
  • BakerMan @ BakerMan:
    i know, i know, i'm late
  • Sicklyboy @ Sicklyboy:
    @BigOnYa, I'll rip a bag off my Volcano to that, brother
    +2
  • a_username_that_is_cool @ a_username_that_is_cool:
    DDDS . Dual Developer Dedede System :)
    +1
  • BakerMan @ BakerMan:
    also happy birthday @Xdqwerty
    +1
  • BigOnYa @ BigOnYa:
    Is it me you're looking for?
  • MysticStarlight @ MysticStarlight:
    'Cause I wonder where you are
  • MysticStarlight @ MysticStarlight:
    wait I got the lyrics mixed up
    +1
  • BigOnYa @ BigOnYa:
    And I wonder what you do...Lol
  • BigOnYa @ BigOnYa:
    Its all good, I'm here to talk to you.
  • BigOnYa @ BigOnYa:
    Hello
  • BigOnYa @ BigOnYa:
    I've been playing fallout4 all day, I went into a elevator and it kept going, never stopped, waited 5 minutes, must of been a bug. How bout you, whatcha do today?
    +1
  • MysticStarlight @ MysticStarlight:
    I'm wondering why a stray tuxedo cat has a cloudy eye
  • MysticStarlight @ MysticStarlight:
    I've been playing TOTK all day also
    +1
  • MysticStarlight @ MysticStarlight:
    Oh you reminded me of those elevator nightmares
  • BigOnYa @ BigOnYa:
    Awesome game, fun how they force you to build, but you can build as you want
  • MysticStarlight @ MysticStarlight:
    It is super fun, I actually prefer it over BoTW
    +1
  • BigOnYa @ BigOnYa:
    The guy holding the sign always cracked me up, esp when you fail, and it falls
  • MysticStarlight @ MysticStarlight:
    Ah yes, that guy lol. I still need to find all his signs. The game has a lot to do though so I don't know what to finish first
  • MysticStarlight @ MysticStarlight:
    I'm 120 hours in and am still like 44.4% done
    +1
  • BigOnYa @ BigOnYa:
    Good times. Building is starting to get good around now for you. You making me want to make run thru again.
  • BigOnYa @ BigOnYa:
    Ok good chatting, enjoy your gaming, and avoid the lightning, or put your sword away. Good night.
    BigOnYa @ BigOnYa: Ok good chatting, enjoy your gaming, and avoid the lightning, or put your sword away. Good night.