DS App Studio Has Advanced Much

Discussion in 'NDS - Emulation and Homebrew' started by RoyalCardMan, May 8, 2011.

  1. RoyalCardMan
    OP

    RoyalCardMan DS App Studio™ Developer

    Member
    1
    Aug 11, 2010
    United States
    In the middle of gun fire.
    I am advancing DS App Studio really fast, it seems. I have just implemented two new functions that allow you to draw backgrounds on both screens. Here is the code for a project that I was working on.

    <!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1-->// Project Name: NDS App - AwsomiSoft - www.awsomisoft.com

    // Description: this template is a very simple project it
    // contains the basic code for a DS App Studio application

    // Version: 0.4.6

    // whenever using 2D or 3D you must use the start2D or 2D function
    start2D(256, 256);

    // first, you must tell it to start the first form
    startform("Form1");
    wait();
    endif();
    // and this creates the form. To add another form, just
    // do createform and in quotes the name of the form.
    form("Form1");

    ÂÂÂÂÂÂ // First, load a background by going to Resources|Load Background.
    ÂÂÂÂÂÂ // Then, click Load from File and choose a background to load.
    ÂÂÂÂÂÂ // Then, name the background Desert and click Accept. Now, replace
    ÂÂÂÂÂÂ // the say function with drawbackground, and for Index, use 1, and
    ÂÂÂÂÂÂ // for layer, use 3, and for the background to load, in quotes, enter
    ÂÂÂÂÂÂ // the name of the background.
    ÂÂÂÂÂÂ drawtopback(1, 3, "Desert");
    ÂÂÂÂÂÂ drawbottomback(2, 3, "TopBack");
    ÂÂÂÂÂÂ addobject("sprite", 0, 0);
    ÂÂÂÂÂÂ
    endif();<!--c2--></div><!--ec2-->

    And here were the results.

    <img src="http://img802.imageshack.us/img802/9487/screen1h.png" border="0" class="linked-image" />

    And here is the next example having 3D on top, and 2D on the bottom.

    <!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1-->// Project Name: NDS App - AwsomiSoft - www.awsomisoft.com

    // Description: this template is a very simple project it
    // contains the basic code for a DS App Studio application

    // Version: 0.4.6

    // whenever using 2D or 3D you must use the start2D or 2D function
    start3D(256, 256);

    // first, you must tell it to start the first form
    startform("Form1");
    wait();
    endif();
    // and this creates the form. To add another form, just
    // do createform and in quotes the name of the form.
    form("Form1");

    ÂÂÂÂÂÂ // First, load a background by going to Resources|Load Background.
    ÂÂÂÂÂÂ // Then, click Load from File and choose a background to load.
    ÂÂÂÂÂÂ // Then, name the background Desert and click Accept. Now, replace
    ÂÂÂÂÂÂ // the say function with drawbackground, and for Index, use 1, and
    ÂÂÂÂÂÂ // for layer, use 3, and for the background to load, in quotes, enter
    ÂÂÂÂÂÂ // the name of the background.ÂÂÂÂÂÂ
    ÂÂÂÂÂÂ drawbottomback(2, 3, "Desert");
    ÂÂÂÂÂÂ addobject("Point", 0, 0);
    ÂÂÂÂÂÂ loop();
    ÂÂÂÂÂÂÂÂ ogladdlight(8, 8, 8);
    ÂÂÂÂÂÂÂÂ ogldrawmodel("statue", 0, 0);
    ÂÂÂÂÂÂÂÂ ifstylusheld();
    ÂÂÂÂÂÂÂÂÂÂ setobjectxy("Point", "stylus.px", "stylus.py");
    ÂÂÂÂÂÂÂÂ endif();
    ÂÂÂÂÂÂÂÂ ifbuttonheld("UP");
    ÂÂÂÂÂÂÂÂÂÂ oglrotatemodelx("statue", +50);
    ÂÂÂÂÂÂÂÂ endif();
    ÂÂÂÂÂÂÂÂ ifbuttonheld("LEFT");
    ÂÂÂÂÂÂÂÂÂÂ oglrotatemodely("statue", -50);
    ÂÂÂÂÂÂÂÂ endif();
    ÂÂÂÂÂÂÂÂ ifbuttonheld("RIGHT");
    ÂÂÂÂÂÂÂÂÂÂ oglrotatemodely("statue", +50);
    ÂÂÂÂÂÂÂÂ endif();
    ÂÂÂÂÂÂÂÂ ifbuttonheld("DOWN");
    ÂÂÂÂÂÂÂÂÂÂ oglrotatemodelx("statue", -50);
    ÂÂÂÂÂÂÂÂ endif();
    ÂÂÂÂÂÂ endloop();
    ÂÂÂÂÂÂ
    endif();<!--c2--></div><!--ec2-->

    And is the screenshot.

    <img src="http://img855.imageshack.us/img855/2420/screen2cp.png" border="0" class="linked-image" />

    This is such a big advancement for DS App Studio.

    Edit: I did a little comparison, and here is the result of the C++ version:

    <!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1-->#include <nds.h>
    #include <maxmod9.h>
    #include "soundbank.h"
    #include "soundbank_bin.h"
    #include <stdio.h>
    ÂÂtouchPosition stylus;ÂÂPrintConsole topScreen; PrintConsole bottomScreen;ÂÂ
    #include "ad.h"

    #include <filesystem.h>

    #include <stdlib.h>

    #include <string.h>

    #include <dirent.h>
    ÂÂint test = 0; int once = 1;
    #define FRAMES_PER_ANIMATION 1
    ÂÂ
    void dirlist(const char* path) {ÂÂÂÂDIR* pdir = opendir(path);ÂÂÂÂchar *dnbuf;ÂÂÂÂif (pdir != NULL) {ÂÂÂÂÂÂÂÂwhile(true) {ÂÂÂÂÂÂÂÂÂÂÂÂstruct dirent* pent = readdir(pdir);ÂÂÂÂÂÂÂÂÂÂÂÂif(pent == NULL) break;ÂÂÂÂif(strcmp(".", pent->d_name) != 0 && strcmp("..", pent->d_name) != 0) {dnbuf = (char *)malloc(strlen(pent->d_name)+strlen(path)+2);ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂsprintf(dnbuf, "%s/%s", (strcmp("/",path) == 0)?"":Path, pent->d_name); struct stat *statbuf = (struct stat*)malloc(sizeof(statbuf));ÂÂÂÂÂÂÂÂÂÂÂÂstat(dnbuf, statbuf);ÂÂÂÂÂÂÂÂif(S_ISDIR(statbuf->st_mode)) {ÂÂÂÂprintf("%s <DIR> ", dnbuf);ÂÂÂÂdirlist(dnbuf);} else {ÂÂÂÂprintf("%s (%d) ", dnbuf, (int)statbuf->st_size);ÂÂÂÂ} free(dnbuf);ÂÂÂÂfree(statbuf);ÂÂÂÂ}ÂÂÂÂ}ÂÂÂÂclosedir(pdir);ÂÂÂÂ} else {ÂÂÂÂprintf("opendir() failure. ");}}ÂÂvoid renderCube(int size1f, int size2f,int size3f, int size4f,ÂÂint angle,int rgbc, int rgbc2, int rgbc3){ÂÂÂÂglPushMatrix();ÂÂÂÂglTranslatef(0, 0, -4);ÂÂÂÂglRotatef32i(degreesToAngle(angle), inttof32(1), inttof32(1), inttof32(1));ÂÂÂÂglBegin(GL_QUADS);ÂÂÂÂÂÂÂÂglColor3b(rgbc,rgbc2,rgbc3);ÂÂÂÂÂÂÂÂglVertex3f(-size1f,ÂÂsize1f,ÂÂsize1f);ÂÂÂÂÂÂÂÂglColor3b(rgbc,rgbc2,rgbc3);ÂÂÂÂÂÂÂÂglVertex3f( size1f,ÂÂsize1f,ÂÂsize1f);ÂÂÂÂÂÂÂÂglColor3b(rgbc,rgbc2,rgbc3);ÂÂÂÂÂÂÂÂglVertex3f( size1f, -size1f,ÂÂsize1f);ÂÂÂÂglColor3b(rgbc,rgbc2,rgbc3);ÂÂÂÂglVertex3f(-size1f, -size1f,ÂÂsize1f);ÂÂÂÂglColor3b(rgbc,rgbc2,rgbc3);ÂÂÂÂÂÂÂÂglVertex3f(-size2f,ÂÂsize2f, -size2f);ÂÂÂÂglColor3b(rgbc,rgbc2,rgbc3);ÂÂÂÂÂÂÂÂglVertex3f( size2f,ÂÂsize2f, -size2f); glColor3b(rgbc,rgbc2,rgbc3);ÂÂÂÂÂÂÂÂglVertex3f( size2f, -size2f, -size2f);ÂÂÂÂÂÂÂÂglColor3b(rgbc,rgbc2,rgbc3);ÂÂÂÂglVertex3f(-size2f, -size2f, -size2f);ÂÂÂÂglColor3b(rgbc,rgbc2,rgbc3);ÂÂÂÂÂÂÂÂglVertex3f(-size3f,ÂÂsize3f,ÂÂsize3f);ÂÂÂÂglColor3b(rgbc,rgbc2,rgbc3);ÂÂÂÂÂÂÂÂglVertex3f( size3f,ÂÂsize3f,ÂÂsize3f);ÂÂÂÂÂÂÂÂglColor3b(rgbc,rgbc2,rgbc3);ÂÂÂÂÂÂÂÂglVertex3f( size3f,ÂÂsize3f, -size3f);ÂÂÂÂglColor3b(rgbc,rgbc2,rgbc3);ÂÂÂÂglVertex3f(-size3f,ÂÂsize3f, -size3f);ÂÂÂÂglColor3b(rgbc,rgbc2,rgbc3);ÂÂÂÂÂÂÂÂglVertex3f(-size4f, -size4f,ÂÂsize4f);ÂÂÂÂglColor3b(rgbc,rgbc2,rgbc3);ÂÂÂÂÂÂÂÂglVertex3f( size4f, -size4f,ÂÂsize4f);ÂÂÂÂglColor3b(rgbc,rgbc2,rgbc3);ÂÂÂÂÂÂÂÂglVertex3f( size4f, -size4f, -size4f);ÂÂÂÂglColor3b(rgbc,rgbc2,rgbc3);ÂÂÂÂglVertex3f(-size4f, -size4f, -size4f); glColor3b(rgbc,rgbc2,rgbc3);ÂÂÂÂÂÂÂÂglVertex3f( size1f, size1f,ÂÂ-size1f);ÂÂÂÂÂÂÂÂglColor3b(rgbc,rgbc2,rgbc3);ÂÂÂÂÂÂÂÂglVertex3f( size1f, size1f,ÂÂ size1f);ÂÂÂÂglColor3b(rgbc,rgbc2,rgbc3);ÂÂÂÂÂÂÂÂglVertex3f( size1f,-size1f,ÂÂ size1f);ÂÂÂÂglColor3b(rgbc,rgbc2,rgbc3);ÂÂÂÂglVertex3f( size1f,-size1f,ÂÂ-size1f);ÂÂÂÂglColor3b(rgbc,rgbc2,rgbc3);ÂÂÂÂÂÂÂÂglVertex3f(-size1f, size1f,ÂÂ-size1f); glColor3b(rgbc,rgbc2,rgbc3);ÂÂÂÂÂÂÂÂglVertex3f(-size1f, size1f,ÂÂ size1f);ÂÂÂÂglColor3b(rgbc,rgbc2,rgbc3);ÂÂÂÂÂÂÂÂglVertex3f(-size1f,-size1f,ÂÂ size1f);ÂÂÂÂglColor3b(rgbc,rgbc2,rgbc3);ÂÂÂÂglVertex3f(-size1f,-size1f,ÂÂ-size1f);ÂÂÂÂglEnd();ÂÂÂÂglPopMatrix(1); }
    #include"Sprite.h"
    typedef struct
    {ÂÂÂÂ
    int x;ÂÂÂÂ
    int y;
    ÂÂÂÂu16* sprite_gfx_mem[12];ÂÂÂÂ
    int gfx_frame;ÂÂÂÂ
    int state;ÂÂÂÂ
    int anim_frame;
    }Sprite;
    void initSprite(Sprite *sprite, u8* gfx)
    {
    int i;
    for(i = 0; i < 12; i++)
    {sprite->sprite_gfx_mem = oamAllocateGfx(&oamSub, SpriteSize_32x32, SpriteColorFormat_256Color);
    dmaCopy(gfx, sprite->sprite_gfx_mem, 32*32);gfx += 32*32;}}

    #include"Point.h"
    typedef struct
    {ÂÂÂÂ
    int x;ÂÂÂÂ
    int y;
    ÂÂÂÂu16* sprite_gfx_mem[12];ÂÂÂÂ
    int gfx_frame;ÂÂÂÂ
    int state;ÂÂÂÂ
    int anim_frame;
    }Point;
    void initPoint(Point *sprite, u8* gfx)
    {
    int i;
    for(i = 0; i < 12; i++)
    {sprite->sprite_gfx_mem = oamAllocateGfx(&oamSub, SpriteSize_32x32, SpriteColorFormat_256Color);
    dmaCopy(gfx, sprite->sprite_gfx_mem, 32*32);gfx += 32*32;}}

    #include "Desert.h"

    #include "TopBack.h"

    #include"statue_bin.h"
    ;
    #include "font.h"
    const int tile_base = 0; const int map_base = 20;ÂÂint i = 0;ÂÂint main(int argc, char **argv) { consoleDemoInit();ÂÂswiWaitForVBlank(); mmInitDefaultMem((mm_addr)soundbank_bin); videoSetMode(MODE_5_2D); videoSetModeSub(MODE_5_2D); vramSetBankD(VRAM_D_SUB_SPRITE); vramSetBankA(VRAM_A_MAIN_BG_0x06000000); consoleInit(&topScreen, 3,BgType_Text4bpp, BgSize_T_256x256, 31, 0, true, true);ÂÂconsoleInit(&bottomScreen, 3,BgType_Text4bpp, BgSize_T_256x256, 31, 0, false, true);ÂÂvideoSetMode(MODE_0_3D); vramSetBankA(VRAM_A_MAIN_BG_0x06000000);ÂÂconsoleInit(&topScreen, 3,BgType_Text4bpp, BgSize_T_256x256, 31, 0, false, true);ÂÂconsoleInit(&bottomScreen, 3,BgType_Text4bpp, BgSize_T_256x256, 31, 0, false, true); glInit(); bgSetPriority(0, 1); glMaterialShinyness();ÂÂglEnable(GL_ANTIALIAS); glClearColor(0,0,0,31); glClearPolyID(63); glClearDepth(0x7FFF); glViewport(0,0,255,191); glSetToonTableRange( 0, 15, RGB15(8,8,8) );glSetToonTableRange( 16, 31, RGB15(24,24,24) ); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(70, 256.0 / 192.0, 0.1, 40); glLight(0, RGB15(16,16,16) , 0,ÂÂÂÂÂÂÂÂfloattov10(-1.0),ÂÂÂÂÂÂÂÂ0); glLight(1, RGB15(16,16,16),ÂÂ floattov10(-1.0),ÂÂÂÂ0,ÂÂÂÂÂÂÂÂ0); gluLookAt(0.0, 0.0, -5.0, 0.0, 0.0, 0.0,0.0, 1.0, 0.0);ÂÂÂÂÂÂÂÂ Form1();while(1) {}}int speed = 70;int Form1(void){ÂÂ int bg1 = bgInitSub(3, BgType_Bmp8, BgSize_B8_256x256, 0,0); dmaCopy(DesertBitmap, bgGetGfxPtr(bg1), 256*256); dmaCopy(DesertPal, BG_PALETTE_SUB, 256*2); while(1) { glMaterialf(GL_AMBIENT, RGB15(6, 6,6)); glMaterialf(GL_DIFFUSE, RGB15(24,24,24));ÂÂÂÂglMaterialf(GL_SPECULAR, RGB15(0,0,0));ÂÂÂÂglMaterialf(GL_EMISSION, RGB15(0,0,0)); glPolyFmt(POLY_ALPHA(31) | POLY_CULL_BACK | POLY_FORMAT_LIGHT0 | POLY_FORMAT_LIGHT1 | POLY_TOON_HIGHLIGHT);ÂÂ glMatrixMode(GL_PROJECTION); glPushMatrix(); glRotateXi(0); glRotateYi(0); glPolyFmt(POLY_ALPHA(255) | POLY_CULL_BACK | POLY_FORMAT_LIGHT0 | POLY_FORMAT_LIGHT1 | POLY_TOON_HIGHLIGHT);ÂÂscanKeys(); u32 keys = keysHeld(); glCallList((u32*)statue_bin); glFlush(0);scanKeys(); touchRead(&stylus);ÂÂif ( keysHeld() & KEY_UP){ÂÂspeed-= 1;ÂÂglViewport(0,0,255,191); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(speed, 256.0 / 192.0, 0.1, 100);ÂÂÂÂglPolyFmt(POLY_ALPHA(31) | POLY_CULL_NONE);ÂÂÂÂlcdMainOnTop();ÂÂÂÂvramSetBankD(VRAM_D_LCD);ÂÂÂÂvramSetBankC(VRAM_C_SUB_BG);ÂÂÂÂREG_DISPCAPCNT = DCAP_BANK(3) | DCAP_ENABLE | DCAP_SIZE(3);}scanKeys(); touchRead(&stylus);ÂÂif ( keysHeld() & KEY_DOWN){ÂÂspeed+= 1;ÂÂglViewport(0,0,255,191); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(speed, 256.0 / 192.0, 0.1, 100);ÂÂÂÂglPolyFmt(POLY_ALPHA(31) | POLY_CULL_NONE);ÂÂÂÂlcdMainOnTop();ÂÂÂÂvramSetBankD(VRAM_D_LCD);ÂÂÂÂvramSetBankC(VRAM_C_SUB_BG);ÂÂÂÂREG_DISPCAPCNT = DCAP_BANK(3) | DCAP_ENABLE | DCAP_SIZE(3);}scanKeys(); touchRead(&stylus);ÂÂif ( keysHeld() & KEY_LEFT){ÂÂ glMatrixMode(GL_PROJECTION); glPushMatrix(); glRotateYi(-100); glPolyFmt(POLY_ALPHA(255) | POLY_CULL_BACK | POLY_FORMAT_LIGHT0 | POLY_FORMAT_LIGHT1 | POLY_TOON_HIGHLIGHT);ÂÂ scanKeys(); u32 keys = keysHeld(); glCallList((u32*)statue_bin); glFlush(0);}scanKeys(); touchRead(&stylus);ÂÂif ( keysHeld() & KEY_RIGHT){ÂÂ glMatrixMode(GL_PROJECTION); glPushMatrix(); glRotateYi(100); glPolyFmt(POLY_ALPHA(255) | POLY_CULL_BACK | POLY_FORMAT_LIGHT0 | POLY_FORMAT_LIGHT1 | POLY_TOON_HIGHLIGHT);ÂÂ scanKeys(); u32 keys = keysHeld(); glCallList((u32*)statue_bin); glFlush(0);}}}<!--c2--></div><!--ec2-->
     
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice