00001 #ifndef _PA_BGLARGEMAP
00002 #define _PA_BGLARGEMAP
00003
00004
00005 #include "PA_BgTiles.h"
00006
00007
00008 #define PA_TileNumber(x, y) (PA_Modulo((x)+1, 36)+(PA_Modulo((y)+1, 28)*36)) // Used by the tile engine
00009
00010
00011 #define PA_LoadTileEngine(screen, bg_select, bg_tiles) {\
00012 PA_DeleteBg(screen, bg_select);\
00013 PA_LoadBgTilesEx(screen, bg_select, (void*)Blank, (1008<<5));\
00014 PA_BgInfo[screen][bg_select].Tiles = (void*)bg_tiles;\
00015 PA_LoadBgMap(screen, bg_select, Blank, BG_512X256); \
00016 PA_InitBg(screen, bg_select, BG_512X256, 0, 1);\
00017 PA_BGScrollXY(screen, bg_select, 0, 0);}
00018
00019
00020 #define INF_JUSTTILE 268435455
00021 #define MAX_TILES 1008
00022
00023 void PA_InfTilesScrollX(u8 screen, u8 bg_select, s32 x);
00024 void PA_InfTilesScrollY(u8 screen, u8 bg_select, s32 y);
00025 void PA_InfLargeScrollXN(u8 screen, u8 bg_select, s32 x);
00026 void PA_InfLargeScrollYN(u8 screen, u8 bg_select, s32 y);
00027 void PA_LargeScrollXN(u8 screen, u8 bg_select, s32 x);
00028 void PA_LargeScrollYN(u8 screen, u8 bg_select, s32 y);
00029
00030
00031
00032
00082 #define PA_LoadLargeBg(screen, bg_select, bg_tiles, bg_map, color_mode, lx, ly) {\
00083 PA_BgInfo[screen][bg_select].NTiles = SIZEOF_16BIT(bg_tiles)>>5;\
00084 if (PA_BgInfo[screen][bg_select].NTiles < MAX_TILES) {PA_LoadSimpleBg(screen, bg_select, bg_tiles, Blank, BG_512X256, 0, color_mode);}\
00085 else{PA_LoadTileEngine(screen, bg_select, (void*)bg_tiles);}\
00086 PA_InitLargeBg(screen, bg_select, lx, ly, (void*)bg_map);}
00087
00088
00089
00090
00091
00092
00108 #define PA_LoadPAGfxLargeBg(screen, bg_number, bg_name){\
00109 PA_LoadBgPal(screen, bg_number, (void*)bg_name##_Pal); \
00110 PA_LoadLargeBg(screen, bg_number, bg_name##_Tiles, bg_name##_Map, 1, (bg_name##_Info[1]) >> 3, (bg_name##_Info[2]) >> 3);}
00111
00112
00113
00144 #define PA_LoadLargeBgEx(screen, bg_select, bg_tiles, tile_size, bg_map, color_mode, lx, ly) {\
00145 PA_BgInfo[screen][bg_select].NTiles = SIZEOF_16BIT(bg_tiles)>>5;\
00146 if (PA_BgInfo[screen][bg_select].NTiles < MAX_TILES) {PA_LoadBg(screen, bg_select, bg_tiles, tile_size, Blank, BG_512X256, 0, color_mode);}\
00147 else{PA_LoadTileEngine(screen, bg_select, bg_tiles);}\
00148 PA_InitLargeBg(screen, bg_select, lx, ly, (void*)bg_map);}
00149
00150
00151
00152
00169 extern inline void PA_InfLargeScrollX(u8 screen, u8 bg_select, s32 x){
00170 if (PA_BgInfo[screen][bg_select].NTiles < MAX_TILES) PA_InfLargeScrollXN(screen, bg_select, x);
00171 else PA_InfTilesScrollX(screen, bg_select, x);
00172 PA_BgInfo[screen][bg_select].ScrollX = x;
00173 }
00174
00190 extern inline void PA_InfLargeScrollY(u8 screen, u8 bg_select, s32 y){
00191 if (PA_BgInfo[screen][bg_select].NTiles < MAX_TILES) PA_InfLargeScrollYN(screen, bg_select, y);
00192 else PA_InfTilesScrollY(screen, bg_select, y);
00193 PA_BgInfo[screen][bg_select].ScrollY = y;
00194 }
00195
00196
00215 extern inline void PA_InfLargeScrollXY(u8 screen, u8 bg_select, s32 x, s32 y){
00216 PA_InfLargeScrollX(screen, bg_select, x);
00217 PA_InfLargeScrollY(screen, bg_select, y);
00218 }
00219
00235 extern inline void PA_LargeScrollX(u8 screen, u8 bg_select, s32 x){
00236 if (PA_BgInfo[screen][bg_select].NTiles < MAX_TILES) {
00237 PA_LargeScrollXN(screen, bg_select, x);
00238 if (x < 0) x = 0; else if (x >= (s32)(PA_BgInfo[screen][bg_select].Infos.Width-256)) x = PA_BgInfo[screen][bg_select].Infos.Width - 257;
00239 }
00240 else {
00241 PA_InfTilesScrollX(screen, bg_select, x);
00242 }
00243 PA_BgInfo[screen][bg_select].ScrollX = x;
00244 }
00245
00261 extern inline void PA_LargeScrollY(u8 screen, u8 bg_select, s32 y){
00262 if (PA_BgInfo[screen][bg_select].NTiles < MAX_TILES) {
00263 PA_LargeScrollYN(screen, bg_select, y);
00264 if (y < 0) y = 0; else if (y >= (s32)(PA_BgInfo[screen][bg_select].Infos.Height-192)) y = PA_BgInfo[screen][bg_select].Infos.Height - 193;
00265 }
00266 else PA_InfTilesScrollY(screen, bg_select, y);
00267 PA_BgInfo[screen][bg_select].ScrollY = y;
00268 }
00269
00270
00289 extern inline void PA_LargeScrollXY(u8 screen, u8 bg_select, s32 x, s32 y){
00290 PA_LargeScrollX(screen, bg_select, x);
00291 PA_LargeScrollY(screen, bg_select, y);
00292 }
00293
00294
00295
00317 extern inline void PA_InitParallaxX(u8 screen, s32 bg0, s32 bg1, s32 bg2, s32 bg3) {
00318 PA_parallaxX[screen][0] = bg0;
00319 PA_parallaxX[screen][1] = bg1;
00320 PA_parallaxX[screen][2] = bg2;
00321 PA_parallaxX[screen][3] = bg3;
00322 }
00323
00345 extern inline void PA_InitParallaxY(u8 screen, s32 bg0, s32 bg1, s32 bg2, s32 bg3) {
00346 PA_parallaxY[screen][0] = bg0;
00347 PA_parallaxY[screen][1] = bg1;
00348 PA_parallaxY[screen][2] = bg2;
00349 PA_parallaxY[screen][3] = bg3;
00350 }
00351
00352
00353
00366 extern inline void PA_ParallaxScrollX(u8 screen, s32 x){
00367 u8 i;
00368 for(i = 0; i < 4; i++) {
00369 if (PA_parallaxX[screen][i]) {
00370 if(scrollpos[screen][i].infscroll) PA_EasyBgScrollX(screen, i, (PA_parallaxX[screen][i] * x) >> 8);
00371 else PA_BGScrollX(screen, i, (PA_parallaxX[screen][i] * x) >> 8);
00372 }
00373 }
00374 }
00375
00376
00389 extern inline void PA_ParallaxScrollY(u8 screen, s32 y){
00390 u8 i;
00391 for(i = 0; i < 4; i++) {
00392 if (PA_parallaxY[screen][i]) {
00393 if(scrollpos[screen][i].infscroll) PA_EasyBgScrollY(screen, i, (PA_parallaxY[screen][i] * y) >> 8);
00394 else PA_BGScrollY(screen, i, (PA_parallaxY[screen][i] * y) >> 8);
00395 }
00396 }
00397 }
00398
00399
00415 extern inline void PA_ParallaxScrollXY(u8 screen, s32 x, s32 y){
00416 PA_ParallaxScrollX(screen, x);
00417 PA_ParallaxScrollY(screen, y);
00418 }
00419
00420
00422
00423
00424
00425
00426 void PA_InitLargeBg(u8 screen, u8 bg_select, s32 lx, s32 ly, void* bg_map);
00427
00428
00429
00430 #endif
00431