diff --git a/build/systemMenu_RED/Launcher/ARM9/main.rsf b/build/systemMenu_RED/Launcher/ARM9/main.rsf index bec679d7..ca531130 100644 --- a/build/systemMenu_RED/Launcher/ARM9/main.rsf +++ b/build/systemMenu_RED/Launcher/ARM9/main.rsf @@ -143,5 +143,5 @@ RomSpec Segment ALL HostRoot ../../data Root /data - File NTR_IPL_font_m.NFTR myGameBanner.bnr myGameBanner2.bnr + File NTR_IPL_font_m.NFTR CardBanner.bnr DownloadBanner.bnr EmptyBanner.bnr PictoChatBanner.bnr SettingBanner.bnr } \ No newline at end of file diff --git a/build/systemMenu_RED/Launcher/ARM9/src/launcher.c b/build/systemMenu_RED/Launcher/ARM9/src/launcher.c index fdd3ed52..5581150f 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/launcher.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/launcher.c @@ -38,7 +38,7 @@ static void DrawLauncher(u16 nowCsr, const MenuParam *pMenu); // global variable ------------------------------------- // static variable ------------------------------------- -static u16 s_csr = 0; // メニューのカーソル位置 +static int s_csr = 0; // メニューのカーソル位置 static const u16 *s_pStrLauncher[ LAUNCHER_ELEMENT_NUM ]; // ロゴメニュー用文字テーブルへのポインタリスト // const data ----------------------------------------- @@ -106,76 +106,132 @@ static const u16 *const str_backlight[] = { // ランチャー //====================================================== -// きめうちバナー +// バナー表示関係(暫定) #define DBGBNR #ifdef DBGBNR -#define MAX_TITLE_PROPERTY 40 -static BannerFile *banner; -static BannerFile *banner2; -static TitleProperty tp[MAX_TITLE_PROPERTY]; -static GXOamAttr banner_oam_attr; -static GXOamAttr banner_oam_attr2; +static const u8 TITLE_PROPERTY_NUM = 40; +static BannerFile *empty_banner; +static BannerFile *card_banner; +static BannerFile *pictochat_banner; +static BannerFile *download_banner; +static BannerFile *setting_banner; +static TitleProperty tp[TITLE_PROPERTY_NUM]; +static u8 image_index_list[TITLE_PROPERTY_NUM]; +static const int MAX_SHOW_BANNER = 6; +static GXOamAttr banner_oam_attr[MAX_SHOW_BANNER]; +static u8 *pbanner_image_list[TITLE_PROPERTY_NUM*2]; +static int banner_count = 0; -// バナー画像のロード及びOBJ関係初期化 -// 実際には、受け取ったリストからイメージデータのアドレスを取得してVRAMにイメージデータをロードし、 -// 表示するぶんだけ毎フレームGXOamAttrにしてやる必要があるっぽい -// VRAMに格納したデータへは、リストのインデックスからアクセス? +static void LoadBannerFiles() +{ + // ファイル読み込み部分。多分emptyバナーだけ読み込む事になる。本来、アプリ系は外部から取得 + // 最後に解放しないと駄目。だが、どこで解放すればいいのやら…… + u32 size = CMN_LoadFile( (void **)&empty_banner, "data/EmptyBanner.bnr", &g_allocator); + NNS_G2D_ASSERT( size > 0 ); + size = CMN_LoadFile( (void **)&card_banner, "data/CardBanner.bnr", &g_allocator); + NNS_G2D_ASSERT( size > 0 ); + size = CMN_LoadFile( (void **)&pictochat_banner, "data/PictochatBanner.bnr", &g_allocator); + NNS_G2D_ASSERT( size > 0 ); + size = CMN_LoadFile( (void **)&download_banner, "data/DownloadBanner.bnr", &g_allocator); + NNS_G2D_ASSERT( size > 0 ); + size = CMN_LoadFile( (void **)&setting_banner, "data/SettingBanner.bnr", &g_allocator); + NNS_G2D_ASSERT( size > 0 ); +} + +// パレットの読み込みやOBJ関係の初期化 static void BannerInit() { int l; - u32 size = CMN_LoadFile( (void **)&banner, "data/myGameBanner.bnr", &g_allocator); - NNS_G2D_ASSERT( size > 0 ); - size = CMN_LoadFile( (void **)&banner2, "data/myGameBanner2.bnr", &g_allocator); - NNS_G2D_ASSERT( size > 0 ); + LoadBannerFiles(); + // ここでやるべきじゃない気がするBGとOBJの設定 GX_SetVisiblePlane(GX_PLANEMASK_OBJ | GX_PLANEMASK_BG0); // display only OBJ&BG0 - GX_SetOBJVRamModeChar(GX_OBJVRAMMODE_CHAR_1D_32K); // 2D mapping mode + GX_SetOBJVRamModeChar(GX_OBJVRAMMODE_CHAR_1D_128K); // 2D mapping mode - GX_LoadOBJPltt( banner->v1.pltt, 0, BNR_PLTT_SIZE ); - GX_LoadOBJ(banner->v1.image, 0x20, BNR_IMAGE_SIZE); - G2_SetOBJAttr( &banner_oam_attr, // OAM pointer - 128, // X position - 128, // Y position - 0, // Priority - GX_OAM_MODE_NORMAL, // Bitmap mode - FALSE, // mosaic off - GX_OAM_EFFECT_NONE, // affine off - GX_OAM_SHAPE_32x32, // 32x32 size - GX_OAM_COLOR_16, // 16 color - 1, // charactor - 0, // palette - 0); // affine - DC_FlushRange(&banner_oam_attr, sizeof(banner_oam_attr)); + // パレット読み込み + GX_LoadOBJPltt( empty_banner->v1.pltt, 0, BNR_PLTT_SIZE ); - GX_LoadOBJ(banner2->v1.image, 0x20+BNR_IMAGE_SIZE, BNR_IMAGE_SIZE); - G2_SetOBJAttr( &banner_oam_attr2, // OAM pointer - 128, // X position - 128, // Y position - 0, // Priority - GX_OAM_MODE_NORMAL, // Bitmap mode - FALSE, // mosaic off - GX_OAM_EFFECT_NONE, // affine off - GX_OAM_SHAPE_32x32, // 32x32 size - GX_OAM_COLOR_16, // 16 color - 17, // charactor - 0, // palette - 0); // affine - DC_FlushRange(&banner_oam_attr2, sizeof(banner_oam_attr)); - - for(l=0;lv1.image; + for(m=0;mv1.gameName[GetNCDWork()->option.language]; + int width = NNS_G2dTextCanvasGetStringWidth(&gTextCanvas, str, NULL); + PutStringUTF16( (256-width)/2, 48, TXT_COLOR_BLACK, str ); + } } #endif //DBGBNR @@ -204,7 +260,7 @@ void LauncherInit( TitleProperty *pTitleList ) s_launcherPos[ 0 ].enable = FALSE; // DSカードが無い時は、先頭要素を無効にする。 } - DrawMenu( s_csr, &s_launcherParam ); + //DrawMenu( s_csr, &s_launcherParam ); SVC_CpuClear( 0x0000, &tpd, sizeof(TpWork), 16 ); @@ -228,7 +284,14 @@ TitleProperty *LauncherMain( TitleProperty *pTitleList ) static BOOL touch_bl = FALSE; BOOL tp_bl_on_off = FALSE; BOOL tp_select = FALSE; - u16 csr_old; + static int csr_v = 0; + static int selected = 0; + + // 文字描画クリア + NNS_G2dCharCanvasClear(&gCanvas,TXT_COLOR_WHITE); + + PrintfSJIS( 0, 0, TXT_COLOR_BLUE, "TWL-SYSTEM MENU ver.%06x", SYSMENU_VER ); + DrawBackLightSwitch(); // RTC情報の取得&表示 GetAndDrawRtcData(); @@ -255,23 +318,25 @@ TitleProperty *LauncherMain( TitleProperty *pTitleList ) //-------------------------------------- // キー入力処理 //-------------------------------------- - if(pad.trg & PAD_KEY_DOWN){ // カーソルの移動 - if( ++s_csr == LAUNCHER_ELEMENT_NUM ) { - s_csr = 0; - } + if(pad.cont & PAD_KEY_RIGHT){ // バナー選択 + if(csr_v == 0) csr_v = 1; } - if( pad.trg & PAD_KEY_UP ){ - if( --s_csr & 0x80 ) { - s_csr = LAUNCHER_ELEMENT_NUM - 1; - } + if( pad.cont & PAD_KEY_LEFT ){ + if(csr_v == 0) csr_v = -1; } - csr_old = s_csr; - tp_select = SelectMenuByTP( &s_csr, &s_launcherParam ); + s_csr += csr_v; + if((TITLE_PROPERTY_NUM-1)*12 < s_csr) s_csr = (TITLE_PROPERTY_NUM-1)*12; + if( s_csr < 0 ) s_csr = 0; + if(s_csr%12 == 0){ + csr_v = 0; + selected = s_csr/12; + } + // tp_select = SelectMenuByTP( &s_csr, &s_launcherParam ); - DrawMenu( s_csr, &s_launcherParam ); + // DrawMenu( s_csr, &s_launcherParam ); #ifdef DBGBNR - BannerDraw(); + BannerDraw( s_csr, selected, NULL ); #endif if( ( pad.trg & PAD_BUTTON_A ) || ( tp_select ) ) { // メニュー項目への分岐 diff --git a/build/systemMenu_RED/data/CardBanner.bnr b/build/systemMenu_RED/data/CardBanner.bnr new file mode 100644 index 00000000..3e87abc4 Binary files /dev/null and b/build/systemMenu_RED/data/CardBanner.bnr differ diff --git a/build/systemMenu_RED/data/DownloadBanner.bnr b/build/systemMenu_RED/data/DownloadBanner.bnr new file mode 100644 index 00000000..f14caef2 Binary files /dev/null and b/build/systemMenu_RED/data/DownloadBanner.bnr differ diff --git a/build/systemMenu_RED/data/EmptyBanner.bnr b/build/systemMenu_RED/data/EmptyBanner.bnr new file mode 100644 index 00000000..35bb2e40 Binary files /dev/null and b/build/systemMenu_RED/data/EmptyBanner.bnr differ diff --git a/build/systemMenu_RED/data/PictoChatBanner.bnr b/build/systemMenu_RED/data/PictoChatBanner.bnr new file mode 100644 index 00000000..87072f9a Binary files /dev/null and b/build/systemMenu_RED/data/PictoChatBanner.bnr differ diff --git a/build/systemMenu_RED/data/SettingBanner.bnr b/build/systemMenu_RED/data/SettingBanner.bnr new file mode 100644 index 00000000..e1f6218e Binary files /dev/null and b/build/systemMenu_RED/data/SettingBanner.bnr differ diff --git a/build/systemMenu_RED/data/myGameBanner.bnr b/build/systemMenu_RED/data/myGameBanner.bnr deleted file mode 100644 index ba7b17d6..00000000 Binary files a/build/systemMenu_RED/data/myGameBanner.bnr and /dev/null differ diff --git a/build/systemMenu_RED/data/myGameBanner2.bnr b/build/systemMenu_RED/data/myGameBanner2.bnr deleted file mode 100644 index 8a361a66..00000000 Binary files a/build/systemMenu_RED/data/myGameBanner2.bnr and /dev/null differ