From 2c5b3337da355a78e578fa283033c6759e974733 Mon Sep 17 00:00:00 2001 From: yoshida_teruhisa Date: Wed, 30 Jan 2008 01:30:19 +0000 Subject: [PATCH] =?UTF-8?q?TWL=E3=82=A2=E3=83=8B=E3=83=A1=E3=83=BC?= =?UTF-8?q?=E3=82=B7=E3=83=A7=E3=83=B3=E3=83=90=E3=83=8A=E3=83=BC=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C=20=E3=83=BB=E3=82=B5=E3=83=B3=E3=83=97=E3=83=AB?= =?UTF-8?q?=E3=81=A8=E3=81=97=E3=81=A6PICTOCHAT=E3=81=AE=E3=82=A2=E3=82=A4?= =?UTF-8?q?=E3=82=B3=E3=83=B3=E3=82=92TWL=E3=83=90=E3=83=8A=E3=83=BC?= =?UTF-8?q?=E3=81=AB=E5=A4=89=E6=9B=B4=20=E3=83=BBSDK=E3=81=AE=E3=83=84?= =?UTF-8?q?=E3=83=BC=E3=83=ABmakebanner.TWL=E3=82=92=E3=83=93=E3=83=AB?= =?UTF-8?q?=E3=83=89=E3=81=97=E3=81=A6=E3=81=8A=E3=81=8B=E3=81=AA=E3=81=84?= =?UTF-8?q?=E3=81=A8=E3=80=81PICTOCHAT=E3=81=AE=E3=83=90=E3=83=8A=E3=83=BC?= =?UTF-8?q?=E3=81=8C=E3=83=93=E3=83=AB=E3=83=89=E3=81=A7=E3=81=8D=E3=81=BE?= =?UTF-8?q?=E3=81=9B=E3=82=93=20=E3=83=BB=E3=83=90=E3=83=8A=E3=83=BC?= =?UTF-8?q?=E3=81=AE=E7=99=BD=E6=9E=A0=E3=81=8C=E8=A6=8B=E3=81=A5=E3=82=89?= =?UTF-8?q?=E3=81=8B=E3=81=A3=E3=81=9F=E3=81=AE=E3=81=A7=E3=83=A9=E3=83=B3?= =?UTF-8?q?=E3=83=81=E3=83=A3=E3=83=BC=E3=81=AE=E8=83=8C=E6=99=AF=E8=89=B2?= =?UTF-8?q?=E3=82=92=E8=8B=A5=E5=B9=B2=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@544 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../Launcher/ARM9/src/bannerCounter.c | 61 +++++++++- .../Launcher/ARM9/src/bannerCounter.h | 22 ++-- .../Launcher/ARM9/src/launcher.c | 110 ++++++++++++------ .../systemMenu_RED/PictoChat/banner/Makefile | 13 +-- .../banner/icon/msk_pictchat_icon.bin | Bin 0 -> 4480 bytes .../PictoChat/banner/test-utf16_v3.TWL.bsf | Bin 0 -> 562 bytes build/systemMenu_RED/data/BGData_Launcher.c | 10 +- 7 files changed, 154 insertions(+), 62 deletions(-) create mode 100644 build/systemMenu_RED/PictoChat/banner/icon/msk_pictchat_icon.bin create mode 100644 build/systemMenu_RED/PictoChat/banner/test-utf16_v3.TWL.bsf diff --git a/build/systemMenu_RED/Launcher/ARM9/src/bannerCounter.c b/build/systemMenu_RED/Launcher/ARM9/src/bannerCounter.c index 179c3f63..6b7a0783 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/bannerCounter.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/bannerCounter.c @@ -33,6 +33,49 @@ // bannerCounter.c //=============================================== +void BNC_incrementCount( BannerCounter *c ) +{ + // TWLのみカウントインクリメント + if( c->banner->h.platform == BANNER_PLATFORM_TWL ) + { + if( c->banner->anime.control[0].frameCount == 0 ) + { + // アニメに終端しか存在しない + OS_TPrintf( "BNC_incrementCount:Only a Terminator!\n" ); + return; + } + + c->count++; + if( c->count >= c->banner->anime.control[c->control].frameCount ) + { + // カウント値がコントロールのフレームカウントを超えたので次のコントロールへ + c->control++; + c->count = 0; + + //ループ及び停止の処理 + if( c->control >= BANNER_ANIME_CONTROL_INFO_NUM ) + { + // コントロールが限界を超えたら無条件でループ + BNC_resetCount( c ); + } + else if( c->banner->anime.control[c->control].frameCount == 0 ) + { + // コントロールのフレームカウントが0なら終端到達 + if( c->banner->anime.control[c->control].animeType == 0 ) + { + // アニメタイプ0ならループ + BNC_resetCount( c ); + } + else if( c->banner->anime.control[c->control].animeType == 1 ) + { + // アニメタイプ1なら停止(一つ前のコントロールに戻す) + c->control--; + } + } + } + } +} + FrameAnimeData BNC_getFAD( BannerCounter *c ) { FrameAnimeData ret; @@ -40,12 +83,26 @@ FrameAnimeData BNC_getFAD( BannerCounter *c ) { ret.image = c->banner->v1.image; ret.pltt = c->banner->v1.pltt; - ret.vflip = FALSE; ret.hflip = FALSE; + ret.vflip = FALSE; } else { - //TODO:TWLアニメーションバナーのデータを読んでフレームのデータを返す + if( c->banner->anime.control[0].frameCount == 0 ) + { + // アニメに終端しか存在しない + OS_TPrintf( "BNC_getFAD:Only a Terminator!\n" ); + ret.image = c->banner->v1.image; + ret.pltt = c->banner->v1.pltt; + ret.hflip = FALSE; + ret.vflip = FALSE; + return ret; + } + // コントロールデータを読んで、現在のフレームに該当するデータを返す + ret.image = c->banner->anime.image[ c->banner->anime.control[c->control].normal.cellNo ]; + ret.pltt = c->banner->anime.pltt[ c->banner->anime.control[c->control].normal.plttNo ]; + ret.hflip = c->banner->anime.control[c->control].normal.flipType & 0x1; + ret.vflip = (c->banner->anime.control[c->control].normal.flipType & 0x2) >> 1; } return ret; } diff --git a/build/systemMenu_RED/Launcher/ARM9/src/bannerCounter.h b/build/systemMenu_RED/Launcher/ARM9/src/bannerCounter.h index 85a1df89..d1fc4586 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/bannerCounter.h +++ b/build/systemMenu_RED/Launcher/ARM9/src/bannerCounter.h @@ -29,7 +29,8 @@ extern "C" { typedef struct BannerCounter { - u32 count; + u32 control; + u8 count; TWLBannerFile *banner; } BannerCounter; @@ -49,12 +50,7 @@ FrameAnimeData; static inline void BNC_resetCount( BannerCounter *c ) { c->count = 0; -} - -static inline void BNC_initCounter( BannerCounter *c, TWLBannerFile *b) -{ - c->banner = b; - c->count = 0; + c->control = 0; } static inline void BNC_setBanner( BannerCounter *c, TWLBannerFile *b) @@ -62,16 +58,18 @@ static inline void BNC_setBanner( BannerCounter *c, TWLBannerFile *b) c->banner = b; } +static inline void BNC_initCounter( BannerCounter *c, TWLBannerFile *b) +{ + BNC_setBanner( c, b ); + BNC_resetCount( c ); +} + static inline TWLBannerFile* BNC_getBanner( BannerCounter *c ) { return c->banner; } -static inline void BNC_incrementCount( BannerCounter *c ) -{ - c->count++; -} - +void BNC_incrementCount( BannerCounter *c ); FrameAnimeData BNC_getFAD( BannerCounter *c ); FrameAnimeData BNC_getFADAndIncCount( BannerCounter *c ); diff --git a/build/systemMenu_RED/Launcher/ARM9/src/launcher.c b/build/systemMenu_RED/Launcher/ARM9/src/launcher.c index 5b0fa852..b346cefd 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/launcher.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/launcher.c @@ -79,8 +79,10 @@ extern u16 bg_scr_data2[32 * 32]; static void LoadBannerFiles( void ); static void BannerInit( void ); static void SetDefaultBanner( TitleProperty *titleprop ); -static void SetAffineAnimation( int cursor ); -static void BannerDraw(int cursor, int selected, TitleProperty *titleprop); +static void SetAffineAnimation( BOOL (*flipparam)[4] ); +static void SetBannerCounter( TitleProperty *titleprop ); +static void SetOAMAttr( void ); +static void BannerDraw( int selected, TitleProperty *titleprop); static BOOL SelectCenterFunc( u16 *csr, TPData *tgt ); static BOOL SelectFunc( u16 *csr, TPData *tgt ); static void ProcessBackLightPads( void ); @@ -200,27 +202,33 @@ static void SetDefaultBanner( TitleProperty *titleprop ) } } -// アフィンパラメータの設定 -static void SetAffineAnimation( int cursor ) +// 中央2枚(banner_oam_attr[2],banner_oam_attr[3])のバナーのアフィンパラメータの設定 +// flipparamは左h,左v,右h,右vの順序 +static void SetAffineAnimation( BOOL (*flipparam)[4] ) { MtxFx22 mtx; static double wav; - if(cursor%FRAME_PER_SELECT == 0){ // 適当に波打たせてみる + fx32 param; + + if(s_csr%FRAME_PER_SELECT == 0){ // 適当に波打たせてみる double s = sin(wav); s_selected_banner_size = FX32_HALF - (long)( 0x80 * ( s - 1 ) ); - mtx._00 = s_selected_banner_size; + param = s_selected_banner_size; if(!s_wavstop) wav += 0.1; }else{ // 適当に大きさを変えてみる - mtx._00 = FX32_HALF + FX32_HALF*(cursor%FRAME_PER_SELECT)/FRAME_PER_SELECT; + param = FX32_HALF + FX32_HALF*(s_csr%FRAME_PER_SELECT)/FRAME_PER_SELECT; wav = 0; } + + mtx._00 = param * ( (*flipparam)[0] ? -1 : 1 ); mtx._01 = 0; mtx._10 = 0; - mtx._11 = mtx._00; - G2_SetOBJAffine((GXOamAffine *)(&banner_oam_attr[0]), &mtx); - mtx._00 = FX32_ONE - FX32_HALF*(cursor%FRAME_PER_SELECT)/FRAME_PER_SELECT; - mtx._11 = mtx._00; - G2_SetOBJAffine((GXOamAffine *)(&banner_oam_attr[4]), &mtx); + mtx._11 = param * ( (*flipparam)[1] ? -1 : 1 ); + G2_SetOBJAffine((GXOamAffine *)(&banner_oam_attr[0]), &mtx);// 中央左のバナー + param = FX32_ONE - FX32_HALF*(s_csr%FRAME_PER_SELECT)/FRAME_PER_SELECT; + mtx._00 = param * ( (*flipparam)[2] ? -1 : 1 ); + mtx._11 = param * ( (*flipparam)[3] ? -1 : 1 ); + G2_SetOBJAffine((GXOamAffine *)(&banner_oam_attr[4]), &mtx);// 中央右のバナー } static void SetBannerCounter( TitleProperty *titleprop ) @@ -241,27 +249,14 @@ static void SetBannerCounter( TitleProperty *titleprop ) } } -// バナー関係の描画 -// 思ったよりVRAMへのロードが高速だったので、 -// 特に難しいことを考えず表示するイメージデータだけ毎フレームVRAMにロード -static void BannerDraw(int cursor, int selected, TitleProperty *titleprop) +// OAMデータの設定 +static void SetOAMAttr( void ) { int l; - int div1 = cursor / FRAME_PER_SELECT; - int div2 = cursor % FRAME_PER_SELECT; - static int fadecount = 0; - static int old_selected = -1; - - // デフォルトバナーをTitlePropertyに埋め込み - SetDefaultBanner( titleprop ); + int div1 = s_csr / FRAME_PER_SELECT; + int div2 = s_csr % FRAME_PER_SELECT; + BOOL flipparam[4]; - // アフィンパラメータだけ先に設定しておく - SetAffineAnimation( cursor ); - - // バナーカウンタのバナーセット - SetBannerCounter( titleprop ); - - // OAMデータ設定 for (l=0;l/dev/null && \ - $(MAKEBANNER) -d -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) +$(TARGETS): $(BANNER_SPEC) + $(MAKEBANNER) -d -p TWL $(BANNER_SPEC) $(TARGETS) # diff --git a/build/systemMenu_RED/PictoChat/banner/icon/msk_pictchat_icon.bin b/build/systemMenu_RED/PictoChat/banner/icon/msk_pictchat_icon.bin new file mode 100644 index 0000000000000000000000000000000000000000..5b2734aa29fe5a7cc1474fd910a9f00b579e0a4b GIT binary patch literal 4480 zcmeHKJ#Q015Ou!H6)6~qMFFxP5(P>HS0O5hMMHJPrU*((r$~Vi#T7C5Z_VA>o4@S`d;40Nt*5jG@JWUM3#MJ4q~&_3TU_60<<4u z(vY8HU>0jS59BGzd6q4m1s*wsXtfRkNWu_4eh7W8EL(0>N)YKXU{^PsxCBni8~dtE^N z*MIc&54F!dKx>~K`psO>Hq@jT>VJXPnuMqR=w!(H&sUu*LVVkbMD3$@RE zpji979$f#nKJ)r_{p)jD($%l6f6d;P?^FMUcw7Iv_tW>Qf9^ACsM}ze+iTqa1#7^< ztk#7{2T|HBg@zQz5Vb_Hs1$jW{ImiE#gy3bEM|~ELTKJz-XMoV z>%a)k01LMQ5Izd}3(kOn^{>yPI-@C9gGa7=;FY3>!3|aat{2x47a=p+e*M4#k4&T; zn~&>?^-ukU_3xCjKl4kh4;uBiHw!dh9k_aww`YH!{huK>Nq@ZQV7T^?y>riRCxUZP zpxMB&xEfM_?LP~K8O;>9@-~3ZhSmRkzkduD^l$hjcej{~sTpJU(0NHom2wJ~ZAfu0CJ+wfuc?XW{m%2P@s>wT03@ vZsoCPTro5DtQ5^h6V=kWJCo5=wbavUBATz3s^#*nGVr<_O+}N{E6vnzcJN>n literal 0 HcmV?d00001 diff --git a/build/systemMenu_RED/PictoChat/banner/test-utf16_v3.TWL.bsf b/build/systemMenu_RED/PictoChat/banner/test-utf16_v3.TWL.bsf new file mode 100644 index 0000000000000000000000000000000000000000..1049cbbd1e23b80f3fd9fc67cbe22282a9f8a798 GIT binary patch literal 562 zcmaKn%?`mp6otR{`J7Kvz`KHR~O}pQxI1>HnV-RdfDN V{?GeF)tpuM4pBAd6mp_!?gc|XOw9lQ literal 0 HcmV?d00001 diff --git a/build/systemMenu_RED/data/BGData_Launcher.c b/build/systemMenu_RED/data/BGData_Launcher.c index 63ba70f9..459ede70 100644 --- a/build/systemMenu_RED/data/BGData_Launcher.c +++ b/build/systemMenu_RED/data/BGData_Launcher.c @@ -6,12 +6,12 @@ u32 bg_char_data[8 * 6] = { 0xaaaaaaaa, 0xbbbbbbbb, 0xcccccccc, 0xcccccccc, 0xdddddddd, 0xdddddddd, 0xdddddddd, 0xeeeeeeee,// 0002h 0xeeeeeeee, 0xeeeeeeee, 0xeeeeeeee, 0xeeeeeeee, - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,// 0003h - 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, + 0xeeeeeeee, 0xeeeeeeee, 0xeeeeeeee, 0xeeeeeeee,// 0003h + 0xeeeeeeee, 0xeeeeeeee, 0xeeeeeeee, 0xeeeeeeee, 0x11111111, 0x11111111, 0x11111111, 0x11111111,// 0004h 0x11111111, 0x11111111, 0x11111111, 0x11111111, - 0xffffffff, 0xffffff11, 0xffffff11, 0xffff11ff,// 0005h(\) - 0xffff11ff, 0xff11ffff, 0xff11ffff, 0x11ffffff, + 0xeeeeeeee, 0xeeeeee11, 0xeeeeee11, 0xeeee11ee,// 0005h(\) + 0xeeee11ee, 0xee11eeee, 0xee11eeee, 0x11eeeeee, }; @@ -66,6 +66,6 @@ u16 bg_scr_data[32 * 32]= 0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802,0x1802, 0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,//23 0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801,0x1801, -};// Buffer for screen data(背景の枠) +};// Bueeer eor screen data(背景の枠) u16 bg_scr_data2[32 * 32];//スクリーンデータ2 \ No newline at end of file