Sprite GFX 0 is already in use. Error code 109

birdekek

Member
OP
Newcomer
Joined
Jul 25, 2023
Messages
19
Trophies
0
Age
19
XP
45
Country
United States
Also i have one more question, how do you use multiple scripts in 1 project as i have no idea what how to use that
 

plasturion

temporary hermit
Member
Joined
Aug 17, 2012
Messages
1,240
Trophies
2
Location
Tree
XP
3,536
Country
Poland
Do you ask how I manage a project? I'm using code::blocks IDE. I used this tutorial:
https://whatroidoes.wordpress.com/2...itpro-with-codeblocks-and-debug-with-insight/
However if project grows a bit it likes to crash, but that don't bother me much.
Maybe I'm using less stable version. Some scripts can share same variables so sometimes you need to add "extern" to be declared as something global to both (however is better to avoid if possible) or include the file that defines some functions to the other one that is using them.
obraz_2023-08-14_042205376.png
 

birdekek

Member
OP
Newcomer
Joined
Jul 25, 2023
Messages
19
Trophies
0
Age
19
XP
45
Country
United States
Do you ask how I manage a project? I'm using code::blocks IDE. I used this tutorial:
https://whatroidoes.wordpress.com/2...itpro-with-codeblocks-and-debug-with-insight/
However if project grows a bit it likes to crash, but that don't bother me much.
Maybe I'm using less stable version. Some scripts can share same variables so sometimes you need to add "extern" to be declared as something global to both (however is better to avoid if possible) or include the file that defines some functions to the other one that is using them.
View attachment 388259
I tried adding another sprite and im running out of vram, should i optimize my background more?

#include <nds.h>
#include <maxmod9.h>
#include <nf_lib.h>
#include <stdio.h>
#include "soundbank.h"
#include "soundbank_bin.h"

volatile int frame = 0;

void Initialize()
{
NF_SetRootFolder("NITROFS");
NF_Set2D(0, 0);
NF_InitTiledBgBuffers();
NF_InitTiledBgSys(0);

NF_InitSpriteBuffers();
NF_InitSpriteSys(0);

NF_LoadSpriteGfx("ui/birdekek", 0, 64, 64);
NF_LoadSpritePal("ui/birdekek", 0);

NF_VramSpriteGfx(0, 0, 0, false);
NF_VramSpritePal(0, 0, 0);

NF_LoadSpriteGfx("ui/mp", 1, 64, 32);
NF_LoadSpritePal("ui/mpp", 0);

NF_VramSpriteGfx(1, 1, 8, false);
}

void Vblank()
{
frame++;
}

int main(int argc, char** argv)
{
mmInitDefaultMem((mm_addr)soundbank_bin);

irqSet(IRQ_VBLANK, Vblank);

consoleDemoInit();

Initialize();

consoleClear();
setBrightness(0, -16); // Set initial brightness to complete darkness

NF_CreateSprite(0, 0, 0, 0, 96, 32);

mmLoadEffect(SFX_BIRDEKEK);

mmEffect(SFX_BIRDEKEK);

for (int i = 0; i < 120; i++)
{
NF_SpriteOamSet(0);
setBrightness(0, -16 + (i / 7.5f)); // Adjusted the calculation for faster reverse fade
swiWaitForVBlank();
oamUpdate(&oamMain);
}

setBrightness(0, 0);

NF_DeleteSprite(0, 0);

mmLoad(MOD_MAINTHEME);
mmStart(MOD_MAINTHEME, MM_PLAY_LOOP);

NF_LoadTiledBg("maps/mainscreen", "main_bg", 256, 256);
NF_CreateTiledBg(0, 3, "main_bg");

u8 r, g, b;
s16 cR, cG, cB;
u8 speed = 0;
u16 n = 0;

NF_FreeSpriteGfx(0, 0);
NF_UnloadSpritePal(0);

NF_CreateSprite(1, 1, 8, 0, 96, 32);


speed = 0;

for (int i = 0; i < 8; i++) { // Loop from 0 to 255 for smooth transition
for (n = 0; n < 256; n++) {
NF_BgGetPalColor(0, 3, n, &r, &g, &b);
cR = r;
cG = g;
cB = b;

cR += 25;
cG += 25;
cB += 25;
// Decrease the color components
cR--;
if (cR < 0) cR = 0;
cG--;
if (cG < 0) cG = 0;
cB--;
if (cB < 0) cB = 0;

// Update palette color
NF_BgEditPalColor(0, 3, n, cR, cG, cB);
}
NF_BgUpdatePalette(0, 3); // Update the palette

speed++;
if (speed > 1) { // Adjust this value to control the speed of the transition
speed = 0;
}

swiWaitForVBlank(); // Wait for vertical blank
oamUpdate(&oamMain);
}

while (1)
{
swiWaitForVBlank();
}

return 0;
}
 

plasturion

temporary hermit
Member
Joined
Aug 17, 2012
Messages
1,240
Trophies
2
Location
Tree
XP
3,536
Country
Poland
this may be difficult to do - NF_VramSpriteGfx(1, 1, 8, false);
if you intented display another sprite on the main screen then you need type NF_VramSpriteGfx(0, 1, 8, false);
If you want to use second screen then you need add things like:
NF_Set2D(1, 0);NF_InitSpriteSys(1); NF_SpriteOamSet(1);oamUpdate(&oamSub);
There's a lot of space in VRAM, but if you plan to fit more maybe this can be helpful
https://mtheall.com/banks.html
 
Last edited by plasturion,

birdekek

Member
OP
Newcomer
Joined
Jul 25, 2023
Messages
19
Trophies
0
Age
19
XP
45
Country
United States
ok i fixed the vram issue "i forgot to include some of the nessecary things to render bg's and sprites"

but i got the sprite working but its only displaying a single 8 by 8 tile of my sprite

#include <nds.h>
#include <maxmod9.h>
#include <nf_lib.h>
#include <stdio.h>
#include "soundbank.h"
#include "soundbank_bin.h"

volatile int frame = 0;

void Initialize()
{
NF_SetRootFolder("NITROFS");
NF_Set2D(0, 0);
NF_Set2D(1, 0);
NF_InitSpriteSys(1);
NF_SpriteOamSet(1);

NF_InitTiledBgBuffers();
NF_InitTiledBgSys(0);
NF_InitTiledBgSys(1);

NF_InitSpriteBuffers();
NF_InitSpriteSys(0);

NF_LoadSpriteGfx("ui/mp", 1, 128, 32);
NF_LoadSpritePal("ui/mp", 2);

NF_VramSpriteGfx(1, 1, 8, false);
NF_VramSpritePal(1, 2, 4);

NF_LoadSpriteGfx("ui/birdekek", 0, 64, 64);
NF_LoadSpritePal("ui/birdekek", 0);

NF_VramSpriteGfx(0, 0, 0, false);
NF_VramSpritePal(0, 0, 0);
}

void Vblank()
{
frame++;
}

int main(int argc, char** argv)
{
mmInitDefaultMem((mm_addr)soundbank_bin);

irqSet(IRQ_VBLANK, Vblank);

consoleDemoInit();

Initialize();

consoleClear();

NF_CreateSprite(0, 0, 0, 0, 96, 32);

mmLoadEffect(SFX_BIRDEKEK);

mmEffect(SFX_BIRDEKEK);

for (int i = 0; i < 120; i++)
{
NF_SpriteOamSet(0);
swiWaitForVBlank();
oamUpdate(&oamMain);
}

setBrightness(0, 0);

NF_DeleteSprite(0, 0);

NF_CreateSprite(1, 1, 8, 4, 0, 0);

mmLoad(MOD_MAINTHEME);
mmStart(MOD_MAINTHEME, MM_PLAY_LOOP);

NF_LoadTiledBg("maps/mainscreen", "main_bg", 256, 256);
NF_LoadTiledBg("maps/bottomscreen", "bottom_bg", 256, 256);
NF_CreateTiledBg(0, 3, "main_bg");
NF_CreateTiledBg(1, 1, "bottom_bg");

u8 r, g, b;
s16 cR, cG, cB;
u8 speed = 0;
u16 n = 0;

NF_FreeSpriteGfx(0, 0);
NF_UnloadSpritePal(0);

speed = 0;

for (int i = 0; i < 8; i++) { // Loop from 0 to 255 for smooth transition
for (n = 0; n < 256; n++) {
NF_BgGetPalColor(0, 3, n, &r, &g, &b);
cR = r;
cG = g;
cB = b;

cR += 25;
cG += 25;
cB += 25;
// Decrease the color components
cR--;
if (cR < 0) cR = 0;
cG--;
if (cG < 0) cG = 0;
cB--;
if (cB < 0) cB = 0;

// Update palette color
NF_BgEditPalColor(0, 3, n, cR, cG, cB);
}
NF_BgUpdatePalette(0, 3); // Update the palette

speed++;
if (speed > 1) { // Adjust this value to control the speed of the transition
speed = 0;
}

NF_SpriteOamSet(0);
NF_SpriteOamSet(1);

swiWaitForVBlank(); // Wait for vertical blank

oamUpdate(&oamMain);
oamUpdate(&oamSub);
}

while (1)
{
swiWaitForVBlank();
}

return 0;
}

btw its the MP sprite not the birdekek one
Post automatically merged:

1692328118893.png
 
Last edited by birdekek,

plasturion

temporary hermit
Member
Joined
Aug 17, 2012
Messages
1,240
Trophies
2
Location
Tree
XP
3,536
Country
Poland
Last edited by plasturion,

birdekek

Member
OP
Newcomer
Joined
Jul 25, 2023
Messages
19
Trophies
0
Age
19
XP
45
Country
United States

plasturion

temporary hermit
Member
Joined
Aug 17, 2012
Messages
1,240
Trophies
2
Location
Tree
XP
3,536
Country
Poland
Sometimes games use one of three background layers (one layer is background, second is midleground for paralax effect or game characters, and on top things like status bar or text window, etc. belongs to foreground) and sometimes big side bars are combined from many sprites. (if we talk about 2D engine) On that many sprites in example can be printed text font in text window. (in fact they are used as another one layer). There wasn't any improvement in sprite size comparing to previous generation GBA, but that's how it is. Backgrounds as independent instances are acting like sprites for each other, also you can use one of background as a big sprite.
 

birdekek

Member
OP
Newcomer
Joined
Jul 25, 2023
Messages
19
Trophies
0
Age
19
XP
45
Country
United States
Sometimes games use one of three background layers (one layer is background, second is midleground for paralax effect or game characters, and on top things like status bar or text window, etc. belongs to foreground) and sometimes big side bars are combined from many sprites. (if we talk about 2D engine) On that many sprites in example can be printed text font in text window. (in fact they are used as another one layer). There wasn't any improvement in sprite size comparing to previous generation GBA, but that's how it is. Backgrounds as independent instances are acting like sprites for each other, also you can use one of background as a big sprite.
Also how do you refrence scripts inside of other scripts because your last explanation was very vague, i was asking how to actually trigger another script from inside another one. kind of like a chain
 

plasturion

temporary hermit
Member
Joined
Aug 17, 2012
Messages
1,240
Trophies
2
Location
Tree
XP
3,536
Country
Poland
triggering one script inside another one, just one function can call another one, and actually always returns back to the place where it was called. I hope you don't mean something like goto instruction, as is treated as bad practice for this language.
let's say things are simple as this:
void InitializeMore() {
three();
four();
}
void Initialize(){
one();
two();
InitializeMore();
}
main (){
Initialize();
}
...aslo if you would like to do something like this:
void InitializeMore() {
three();
four();
Initialaize();
}
void Initialize(){
one();
two();
InitializeMore();
}
main (){
Initialize();
}
I belive you end up with stack overflow error very soon.
 
Last edited by plasturion,

birdekek

Member
OP
Newcomer
Joined
Jul 25, 2023
Messages
19
Trophies
0
Age
19
XP
45
Country
United States
so i tried adding some headers and stuff to include another script but the console is giving me these errors
Code:
C:/STIDS/source/main.c: In function 'main':
C:/STIDS/source/main.c:161:13: warning: implicit declaration of function 'MultiplayerMatch' [-Wimplicit-function-declaration]
  161 |             MultiplayerMatch();
      |             ^~~~~~~~~~~~~~~~
multiplayermatch.c
linking STIDS.elf
C:/devkitPro/devkitARM/bin/../lib/gcc/arm-none-eabi/13.1.0/../../../../arm-none-eabi/bin/ld.exe: multiplayermatch.o: in function `Vblank':
C:/STIDS/source/multiplayermatch.c:19: multiple definition of `Vblank'; main.o:C:/STIDS/source/main.c:40: first defined here
C:/devkitPro/devkitARM/bin/../lib/gcc/arm-none-eabi/13.1.0/../../../../arm-none-eabi/bin/ld.exe: multiplayermatch.o: in function `main':
C:/STIDS/source/multiplayermatch.c:24: multiple definition of `main'; main.o:C:/STIDS/source/main.c:44: first defined here
C:/devkitPro/devkitARM/bin/../lib/gcc/arm-none-eabi/13.1.0/../../../../arm-none-eabi/bin/ld.exe: multiplayermatch.o:C:/STIDS/source/multiplayermatch.c:14: multiple definition of `frame'; main.o:C:/STIDS/source/main.c:8: first defined here
C:/devkitPro/devkitARM/bin/../lib/gcc/arm-none-eabi/13.1.0/../../../../arm-none-eabi/bin/ld.exe: main.o: in function `main':
C:/STIDS/source/main.c:161: undefined reference to `MultiplayerMatch'
collect2.exe: error: ld returned 1 exit status
make[1]: *** [/c/STIDS/Makefile:56: /c/STIDS/STIDS.elf] Error 1
make: *** [Makefile:164: build] Error 2

heres the rest of my code too

main.cpp

C++:
#include <nds.h>
#include <maxmod9.h>
#include <nf_lib.h>
#include <stdio.h>
#include "soundbank.h"
#include "soundbank_bin.h"

volatile int frame = 0;

void Initialize()
{
    NF_SetRootFolder("NITROFS");
    NF_Set2D(0, 0);
    NF_Set2D(1, 0);
    NF_InitSpriteSys(1);
    NF_SpriteOamSet(1);

    NF_InitTiledBgBuffers();
    NF_InitTiledBgSys(0);
    NF_InitTiledBgSys(1);

    NF_InitSpriteBuffers();
    NF_InitSpriteSys(0);

    NF_LoadSpriteGfx("ui/birdekek", 0, 64, 64);
    NF_LoadSpritePal("ui/birdekek", 0);

    NF_LoadTiledBg("maps/mainscreen", "main_bg", 256, 256);
    NF_LoadTiledBg("maps/bottomscreen", "bottom_bg", 256, 256);
    NF_LoadTiledBg("maps/msc", "bottom_select", 256, 256);
    NF_LoadTiledBg("maps/mscoff", "bottom_select_two", 256, 256);
    NF_LoadTiledBg("maps/mscon", "bottom_select_one", 256, 256);

    NF_VramSpriteGfx(0, 0, 0, false);
    NF_VramSpritePal(0, 0, 0);
}

void Vblank()
{
    frame++;
}

int main(int argc, char** argv)
{
    mmInitDefaultMem((mm_addr)soundbank_bin);

    irqSet(IRQ_VBLANK, Vblank);

    consoleDemoInit();

    Initialize();

    consoleClear();

    NF_CreateSprite(0, 0, 0, 0, 96, 32);

    mmLoadEffect(SFX_BIRDEKEK);
    mmLoadEffect(SFX_SELECT);

    mmEffect(SFX_BIRDEKEK);

    for (int i = 0; i < 120; i++)
    {
        NF_SpriteOamSet(0);
        swiWaitForVBlank();
        oamUpdate(&oamMain);
    }

    setBrightness(0, 0);

    NF_DeleteSprite(0, 0);

    mmLoad(MOD_MAINTHEME);
    mmStart(MOD_MAINTHEME, MM_PLAY_LOOP);

    NF_CreateTiledBg(0, 3, "main_bg");
    NF_CreateTiledBg(1, 3, "bottom_bg");
    NF_CreateTiledBg(1, 1, "bottom_select");

    u8 r, g, b;
    s16 cR, cG, cB;
    u8 speed = 0;
    u16 n = 0;

    int selection = 0;
    int keys;

    NF_FreeSpriteGfx(0, 0);
    NF_UnloadSpritePal(0);

    speed = 0;

    for (int i = 0; i < 8; i++) { // Loop from 0 to 255 for smooth transition
        for (n = 0; n < 256; n++) {
            NF_BgGetPalColor(0, 3, n, &r, &g, &b);
            cR = r;
            cG = g;
            cB = b;

            cR += 25;
            cG += 25;
            cB += 25;
            // Decrease the color components
            cR--;
            if (cR < 0) cR = 0;
            cG--;
            if (cG < 0) cG = 0;
            cB--;
            if (cB < 0) cB = 0;

            // Update palette color
            NF_BgEditPalColor(0, 3, n, cR, cG, cB);
        }
        NF_BgUpdatePalette(0, 3); // Update the palette

        speed++;
        if (speed > 1) { // Adjust this value to control the speed of the transition
            speed = 0;
        }

        NF_SpriteOamSet(0);
        NF_SpriteOamSet(1);

        swiWaitForVBlank(); // Wait for vertical blank

        oamUpdate(&oamMain);
        oamUpdate(&oamSub);
    }

    while (1)
    {
        scanKeys();

        keys = keysDown();

        if (keys & KEY_DOWN) {
            if (selection < 2) {
                selection++;
                mmEffect(SFX_SELECT);
            }
        }

        if (keys & KEY_UP) {
            if (selection > 1) {
                selection--;
                mmEffect(SFX_SELECT);
            }
        }

        if (selection == 1) {
            NF_DeleteTiledBg(1, 1);
            NF_CreateTiledBg(1, 1, "bottom_select_one");
        }

        if (selection == 2) {
            NF_DeleteTiledBg(1, 1);
            NF_CreateTiledBg(1, 1, "bottom_select_two");
        }

        if(keys & KEY_A & (selection == 1)) {
            MultiplayerMatch();
            return 0;
        }

        swiWaitForVBlank();
    }

    return 0;
}

multiplayermatch.cpp

C++:
#include <nds.h>

#include <stdio.h>

volatile int frame = 0;

//---------------------------------------------------------------------------------
void Vblank() {
    //---------------------------------------------------------------------------------
    frame++;
}

//---------------------------------------------------------------------------------
int main(void) {
    irqSet(IRQ_VBLANK, Vblank);

    consoleDemoInit();

    iprintf("Hee-eee");

    while (1) {

        swiWaitForVBlank();
    }

    return 0;
}

multiplayermenu.h

C:
#ifndef __MULTIPLAYERMENU_H__
#define __MULTIPLAYERMENU_H__

void MultiplayerMatch();

#endif // __MULTIPLAYERMENU_H__
 

plasturion

temporary hermit
Member
Joined
Aug 17, 2012
Messages
1,240
Trophies
2
Location
Tree
XP
3,536
Country
Poland
let's say better solution here will be function like void multiplayer() instead of main() (as this one exsists already) doing some things like main loop is doing.
this is intresting:
Code:
        if(keys & KEY_A & (selection == 1)) {
            MultiplayerMatch();
            return 0;
        }
I see no point in return 0; you can't move main program instance to other one closing previous one like this.
return 0 in main() means exit the program once and for good.
you could here in main loop create something like game modes with switch - case selector and run a function declared in multiplayer() or just move main loop inside a function in other stcript file with posible return back to main menu (main() in main.c). Maybe someone else can have better ideas here.
 
Last edited by plasturion,

birdekek

Member
OP
Newcomer
Joined
Jul 25, 2023
Messages
19
Trophies
0
Age
19
XP
45
Country
United States
let's say better solution here will be function like void multiplayer() instead of main() (as this one exsists already) doing some things like main loop is doing.
ok, i fixed those issues, but the games just crashing now
MultiplayerMatch.c
C++:
#include <nds.h>

#include <stdio.h>

void MultiplayerMatch() {
    iprintf("Printed\n");
}

Main.c
C++:
#include <nds.h>
#include <maxmod9.h>
#include <nf_lib.h>
#include <stdio.h>
#include "soundbank.h"
#include "multiplayermenu.h"
#include "soundbank_bin.h"

volatile int frame = 0;

void Initialize()
{
    NF_SetRootFolder("NITROFS");
    NF_Set2D(0, 0);
    NF_Set2D(1, 0);
    NF_InitSpriteSys(1);
    NF_SpriteOamSet(1);

    NF_InitTiledBgBuffers();
    NF_InitTiledBgSys(0);
    NF_InitTiledBgSys(1);

    NF_InitSpriteBuffers();
    NF_InitSpriteSys(0);

    NF_LoadSpriteGfx("ui/birdekek", 0, 64, 64);
    NF_LoadSpritePal("ui/birdekek", 0);

    NF_LoadTiledBg("maps/mainscreen", "main_bg", 256, 256);
    NF_LoadTiledBg("maps/bottomscreen", "bottom_bg", 256, 256);
    NF_LoadTiledBg("maps/msc", "bottom_select", 256, 256);
    NF_LoadTiledBg("maps/mscoff", "bottom_select_two", 256, 256);
    NF_LoadTiledBg("maps/mscon", "bottom_select_one", 256, 256);

    NF_VramSpriteGfx(0, 0, 0, false);
    NF_VramSpritePal(0, 0, 0);
}

void Vblank()
{
    frame++;
}

int main(int argc, char** argv)
{
    mmInitDefaultMem((mm_addr)soundbank_bin);

    irqSet(IRQ_VBLANK, Vblank);

    consoleDemoInit();

    Initialize();

    consoleClear();

    NF_CreateSprite(0, 0, 0, 0, 96, 32);

    mmLoadEffect(SFX_BIRDEKEK);
    mmLoadEffect(SFX_SELECT);

    mmEffect(SFX_BIRDEKEK);

    for (int i = 0; i < 120; i++)
    {
        NF_SpriteOamSet(0);
        swiWaitForVBlank();
        oamUpdate(&oamMain);
    }

    setBrightness(0, 0);

    NF_DeleteSprite(0, 0);

    mmLoad(MOD_MAINTHEME);
    mmStart(MOD_MAINTHEME, MM_PLAY_LOOP);

    NF_CreateTiledBg(0, 3, "main_bg");
    NF_CreateTiledBg(1, 3, "bottom_bg");
    NF_CreateTiledBg(1, 1, "bottom_select");

    u8 r, g, b;
    s16 cR, cG, cB;
    u8 speed = 0;
    u16 n = 0;

    int selection = 0;
    int keys;

    NF_FreeSpriteGfx(0, 0);
    NF_UnloadSpritePal(0);

    speed = 0;

    for (int i = 0; i < 8; i++) { // Loop from 0 to 255 for smooth transition
        for (n = 0; n < 256; n++) {
            NF_BgGetPalColor(0, 3, n, &r, &g, &b);
            cR = r;
            cG = g;
            cB = b;

            cR += 25;
            cG += 25;
            cB += 25;
            // Decrease the color components
            cR--;
            if (cR < 0) cR = 0;
            cG--;
            if (cG < 0) cG = 0;
            cB--;
            if (cB < 0) cB = 0;

            // Update palette color
            NF_BgEditPalColor(0, 3, n, cR, cG, cB);
        }
        NF_BgUpdatePalette(0, 3); // Update the palette

        speed++;
        if (speed > 1) { // Adjust this value to control the speed of the transition
            speed = 0;
        }

        NF_SpriteOamSet(0);
        NF_SpriteOamSet(1);

        swiWaitForVBlank(); // Wait for vertical blank

        oamUpdate(&oamMain);
        oamUpdate(&oamSub);
    }

    while (1)
    {
        scanKeys();

        keys = keysDown();

        if (keys & KEY_DOWN) {
            if (selection < 2) {
                selection++;
                mmEffect(SFX_SELECT);
            }
        }

        if (keys & KEY_UP) {
            if (selection > 1) {
                selection--;
                mmEffect(SFX_SELECT);
            }
        }

        if (selection == 1) {
            NF_DeleteTiledBg(1, 1);
            NF_CreateTiledBg(1, 1, "bottom_select_one");
        }

        if (selection == 2) {
            NF_DeleteTiledBg(1, 1);
            NF_CreateTiledBg(1, 1, "bottom_select_two");
        }

        if(keys & KEY_A & (selection == 1)) {
            Multiplayer();
            return 0;
        }

        swiWaitForVBlank();
    }

    return 0;
}

void Multiplayer()
{
    MultiplayerMatch();
}
 

plasturion

temporary hermit
Member
Joined
Aug 17, 2012
Messages
1,240
Trophies
2
Location
Tree
XP
3,536
Country
Poland
Not sure what kind of errors but it is required to add every definitions before main() function or at least declarations.
so void Multiplayer() should be moved up.
also multiplayer.h:
C++:
#include <nds.h>
#include <stdio.h>
void MultiplayerMatch();
multiplayer.cpp:
C++:
#include "multiplayer.h"
void MultiplayerMatch() {
    iprintf("Printed\n");
}
 
Last edited by plasturion,

birdekek

Member
OP
Newcomer
Joined
Jul 25, 2023
Messages
19
Trophies
0
Age
19
XP
45
Country
United States
Not sure what kind of errors but it is required to add every definitions before main() function or at least declarations.
so void Multiplayer() should be moved up.
also multiplayer.h:
C++:
#include <nds.h>
#include <stdio.h>
void MultiplayerMatch();
multiplayer.cpp:
C++:
#include "multiplayer.h"
void MultiplayerMatch() {
    iprintf("Printed\n");
}
did all of that but its still crashing
 

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
  • K3Nv2 @ K3Nv2:
    Spent like 5 hours on switch one never touched it again
  • Psionic Roshambo @ Psionic Roshambo:
    Sentinel of the stary skies
  • K3Nv2 @ K3Nv2:
    Ds is 20 years old this year
  • Psionic Roshambo @ Psionic Roshambo:
    So MJ no longer wants to play with it?
  • K3Nv2 @ K3Nv2:
    He put it down when the 3ds came out
  • SylverReZ @ SylverReZ:
    @K3Nv2, RIP Felix does great videos on the PS3 yellow-light-of-death.
  • Jayro @ Jayro:
    Eventhough the New 3DS XL is more powerful, I still feel like the DS Lite was a more polished system. It's a real shame that it never got an XL variant keeping the GBA slot. You'd have to go on AliExpress and buy an ML shell to give a DS phat the unofficial "DS Lite" treatment, and that's the best we'll ever get I'm afraid.
    +1
  • Jayro @ Jayro:
    The phat model had amazingly loud speakers tho.
    +1
  • SylverReZ @ SylverReZ:
    @Jayro, I don't see whats so special about the DS ML, its just a DS lite in a phat shell. At least the phat model had louder speakers, whereas the lite has a much better screen.
    +1
  • SylverReZ @ SylverReZ:
    They probably said "Hey, why not we combine the two together and make a 'new' DS to sell".
  • Veho @ Veho:
    It's a DS Lite in a slightly bigger DS Lite shell.
    +1
  • Veho @ Veho:
    It's not a Nintendo / iQue official product, it's a 3rd party custom.
    +1
  • Veho @ Veho:
    Nothing special about it other than it's more comfortable than the Lite
    for people with beefy hands.
    +1
  • Jayro @ Jayro:
    I have yaoi anime hands, very lorge but slender.
  • Jayro @ Jayro:
    I'm Slenderman.
  • Veho @ Veho:
    I have hands.
  • BakerMan @ BakerMan:
    imagine not having hands, cringe
    +1
  • AncientBoi @ AncientBoi:
    ESPECIALLY for things I do to myself :sad:.. :tpi::rofl2: Or others :shy::blush::evil:
  • The Real Jdbye @ The Real Jdbye:
    @SylverReZ if you could find a v5 DS ML you would have the best of both worlds since the v5 units had the same backlight brightness levels as the DS Lite unlockable with flashme
  • The Real Jdbye @ The Real Jdbye:
    but that's a long shot
  • The Real Jdbye @ The Real Jdbye:
    i think only the red mario kart edition phat was v5
  • BigOnYa @ BigOnYa:
    A woman with no arms and no legs was sitting on a beach. A man comes along and the woman says, "I've never been hugged before." So the man feels bad and hugs her. She says "Well i've also never been kissed before." So he gives her a kiss on the cheek. She says "Well I've never been fucked before." So the man throws her into the ocean and says "Now you're fucked."
    BigOnYa @ BigOnYa: A woman with no arms and no legs was sitting on a beach. A man comes along and the woman says...