00001 #ifndef _PA_SpriteDual
00002 #define _PA_SpriteDual
00003
00004
00011 #include "PA_Sprite.h"
00012
00013
00028 extern inline void PA_SetScreenSpace(s16 ScreenSpace){
00029 PA_ScreenSpace = 192 + ScreenSpace;
00030 }
00031
00032
00033
00034
00035
00036
00048 extern inline void PA_DualSetSpriteY(u8 obj, s16 y){
00049 s16 y0 = 192; s16 y1 = 192;
00050 if (y < 192) y1 = y;
00051 if (y > PA_ScreenSpace-64) y0 = y - PA_ScreenSpace;
00052 PA_SetSpriteY(0, obj, y0);
00053 PA_SetSpriteY(1, obj, y1);
00054 }
00055
00056
00057
00087 extern inline void PA_DualCreateSprite(u8 obj_number, void* obj_data, u8 obj_shape, u8 obj_size, u8 color_mode, u8 palette, s16 x, s16 y) {
00088 PA_CreateSprite(0, obj_number, obj_data, obj_shape, obj_size, color_mode, palette, x, 192);
00089 PA_CreateSprite(1, obj_number, obj_data, obj_shape, obj_size, color_mode, palette, x, 192);
00090 PA_DualSetSpriteY(obj_number, y);
00091 };
00092
00140 extern inline void PA_DualCreateSpriteEx(u8 obj_number, void* obj_data, u8 obj_shape, u8 obj_size, u8 color_mode, u8 palette, u8 obj_mode, bool mosaic, bool hflip, bool vflip, u8 prio, bool dblsize, s16 x, s16 y){
00141 PA_CreateSpriteEx(0, obj_number, obj_data, obj_shape, obj_size, color_mode, palette, obj_mode, mosaic, hflip, vflip, prio, dblsize, x, 192);
00142 PA_CreateSpriteEx(1, obj_number, obj_data, obj_shape, obj_size, color_mode, palette, obj_mode, mosaic, hflip, vflip, prio, dblsize, x, 192);
00143 PA_DualSetSpriteY(obj_number, y);
00144 }
00145
00146
00147
00148
00149
00188 extern inline void PA_DualCreate16bitSpriteEx(u8 obj_number, void* obj_data, u8 obj_shape, u8 obj_size, bool mosaic, bool hflip, bool vflip, u8 prio, bool dblsize, s16 x, s16 y){
00189 u16 mem_size = PA_obj_sizes[obj_size][obj_shape] << 1;
00190 u16 *gfx = (u16*)malloc(mem_size);
00191 mem_size = mem_size >> 1;
00192 s32 i;
00193 u16 *data = (u16*)obj_data;
00194 for (i = 0; i < mem_size; i++) gfx[i] = data[i] + (1 << 15);
00195
00196 PA_obj[0][obj_number].atr2 = PA_CreateGfx(0, gfx, obj_shape, obj_size, 2) + (prio << 10) + (15 << 12);
00197 PA_obj[1][obj_number].atr2 = PA_CreateGfx(1, gfx, obj_shape, obj_size, 2) + (prio << 10) + (15 << 12);
00198 PA_obj[1][obj_number].atr0 = PA_obj[0][obj_number].atr0 = (192 & OBJ_Y) + (dblsize << 9) + (3 << 10) + (mosaic << 12) + (0 << 13) + (obj_shape << 14);
00199 PA_obj[1][obj_number].atr1 = PA_obj[0][obj_number].atr1 = (x & OBJ_X) + (hflip << 12) + (vflip << 13) + (obj_size << 14);
00200 PA_DualSetSpriteY(obj_number, y);
00201
00202 free(gfx);
00203 }
00204
00205
00206
00230 extern inline void PA_DualCreate16bitSprite(u8 obj_number, void* obj_data, u8 obj_shape, u8 obj_size, s16 x, s16 y){
00231 PA_DualCreate16bitSpriteEx(obj_number, obj_data, obj_shape, obj_size, 0, 0, 0, 0, 0, x, y);
00232 }
00233
00234
00235
00236
00266 extern inline void PA_DualCreateSpriteFromGfx(u8 obj_number, u16 *obj_gfx, u8 obj_shape, u8 obj_size, u8 color_mode, u8 palette, s16 x, s16 y) {
00267 PA_CreateSpriteFromGfx(0, obj_number, obj_gfx[0], obj_shape, obj_size, color_mode, palette, x, 192);
00268 PA_CreateSpriteFromGfx(1, obj_number, obj_gfx[1], obj_shape, obj_size, color_mode, palette, x, 192);
00269 PA_DualSetSpriteY(obj_number, y);
00270 }
00271
00319 extern inline void PA_DualCreateSpriteExFromGfx(u8 obj_number, u16 *obj_gfx, u8 obj_shape, u8 obj_size, u8 color_mode, u8 palette, u8 obj_mode, bool mosaic, bool hflip, bool vflip, u8 prio, bool dblsize, s16 x, s16 y) {
00320 PA_CreateSpriteExFromGfx(0, obj_number, obj_gfx[0], obj_shape, obj_size, color_mode, palette, obj_mode, mosaic, hflip, vflip, prio, dblsize, x, 192);
00321 PA_CreateSpriteExFromGfx(1, obj_number, obj_gfx[1], obj_shape, obj_size, color_mode, palette, obj_mode, mosaic, hflip, vflip, prio, dblsize, x, 192);
00322 PA_DualSetSpriteY(obj_number, y);
00323 }
00324
00325
00337 extern inline void PA_DualUpdateSpriteGfx(u8 obj_number, void *obj_data){
00338 PA_UpdateSpriteGfx(0, obj_number, obj_data);
00339 PA_UpdateSpriteGfx(1, obj_number, obj_data);
00340 }
00341
00342
00354 extern inline void PA_DualUpdateGfx(u16 gfx_number, void *obj_data){
00355 PA_UpdateGfx(0, gfx_number, obj_data);
00356 PA_UpdateGfx(1, gfx_number, obj_data);
00357 }
00358
00359
00360
00361
00370 extern inline void PA_DualDeleteSprite(u8 obj_number){
00371 PA_DeleteSprite(0, obj_number);
00372 PA_DeleteSprite(1, obj_number);
00373 }
00374
00375
00376
00388 extern inline void PA_DualSetSpriteRotEnable(u8 sprite, u8 rotset){
00389 PA_SetSpriteRotEnable(0, sprite, rotset);
00390 PA_SetSpriteRotEnable(1, sprite, rotset);
00391 }
00392
00393
00394
00403 extern inline void PA_DualSetSpriteRotDisable(u8 sprite){
00404 PA_SetSpriteRotDisable(0, sprite);
00405 PA_SetSpriteRotDisable(1, sprite);
00406 }
00407
00426 extern inline void PA_DualSetRotset(u8 rotset, s16 angle, u16 zoomx, u16 zoomy) {
00427 u8 obj_num = (rotset << 2);
00428 PA_obj[0][obj_num].atr3 = PA_obj[1][obj_num].atr3 = (PA_Cos(angle) * zoomx) >> 8;
00429 PA_obj[0][obj_num + 1].atr3 = PA_obj[1][obj_num + 1].atr3 = (-PA_Sin(angle) * zoomy) >> 8;
00430 PA_obj[0][obj_num + 2].atr3 = PA_obj[1][obj_num + 2].atr3 = (PA_Sin(angle) * zoomx) >> 8;
00431 PA_obj[0][obj_num + 2].atr3 = PA_obj[1][obj_num + 2].atr3 = (PA_Sin(angle) * zoomx) >> 8;
00432 PA_obj[0][obj_num + 3].atr3 = PA_obj[1][obj_num + 3].atr3 = (PA_Cos(angle) * zoomy) >> 8;
00433 }
00434
00446 extern inline void PA_DualSetRotsetNoZoom(u8 rotset, s16 angle) {
00447 u8 obj_num = (rotset << 2);
00448 PA_obj[0][obj_num].atr3 = PA_obj[1][obj_num].atr3 = PA_Cos(angle);
00449 PA_obj[0][obj_num + 1].atr3 = PA_obj[1][obj_num + 1].atr3 = -PA_Sin(angle);
00450 PA_obj[0][obj_num + 2].atr3 = PA_obj[1][obj_num + 2].atr3 = PA_Sin(angle);
00451 PA_obj[0][obj_num + 3].atr3 = PA_obj[1][obj_num + 3].atr3 = PA_Cos(angle);
00452 }
00453
00454
00469 extern inline void PA_DualSetRotsetNoAngle(u8 rotset, u16 zoomx, u16 zoomy) {
00470 u8 obj_num = (rotset << 2);
00471 PA_obj[0][obj_num].atr3 = PA_obj[1][obj_num].atr3 = zoomx;
00472 PA_obj[0][obj_num + 1].atr3 = PA_obj[1][obj_num + 1].atr3 = 0;
00473 PA_obj[0][obj_num + 2].atr3 = PA_obj[1][obj_num + 2].atr3 = 0;
00474 PA_obj[0][obj_num + 3].atr3 = PA_obj[1][obj_num + 3].atr3 = zoomy;
00475 }
00476
00477
00478
00479
00480
00481
00482
00494 extern inline void PA_DualSetSpriteX(u8 obj, s16 x){
00495 PA_obj[0][obj].atr1 = PA_obj[1][obj].atr1 = (PA_obj[0][obj].atr1 & ALL_BUT(OBJ_X)) + ((x) & OBJ_X);
00496 }
00497
00498
00499
00500
00501
00502
00503
00504
00519 extern inline void PA_DualSetSpriteXY(u8 sprite, s16 x, s16 y) {
00520 PA_DualSetSpriteX(sprite, x);
00521 PA_DualSetSpriteY(sprite, y);
00522 }
00523
00524
00525
00537 extern inline void PA_DualSetSpritePal(u8 obj, u8 pal){
00538 PA_SetSpritePal(0, obj, pal);
00539 PA_SetSpritePal(1, obj, pal);
00540 }
00541
00542
00543
00555 extern inline void PA_DualSetSpriteDblsize(u8 obj, bool dblsize){
00556 PA_SetSpriteDblsize(0, obj, dblsize);
00557 PA_SetSpriteDblsize(1, obj, dblsize);
00558 }
00559
00560
00561
00562
00574 extern inline void PA_DualSetSpriteColors(u8 sprite, bool n_colors){
00575 PA_SetSpriteColors(0, sprite, n_colors);
00576 PA_SetSpriteColors(1, sprite, n_colors);
00577
00578 }
00579
00580
00581
00582
00594 extern inline void PA_DualSetSpriteMode(u8 sprite, u8 obj_mode){
00595 PA_SetSpriteMode(0, sprite, obj_mode);
00596 PA_SetSpriteMode(1, sprite, obj_mode);
00597 }
00598
00599
00600
00601
00602
00603
00615 extern inline void PA_DualSetSpriteMosaic(u8 obj, bool mosaic){
00616 PA_SetSpriteMosaic(0, obj, mosaic);
00617 PA_SetSpriteMosaic(1, obj, mosaic);
00618 }
00619
00620
00621
00622
00623
00624
00636 extern inline void PA_DualSetSpriteHflip(u8 obj, bool hflip){
00637 PA_SetSpriteHflip(0, obj, hflip);
00638 PA_SetSpriteHflip(1, obj, hflip);
00639 }
00640
00641
00642
00643
00655 extern inline void PA_DualSetSpriteVflip(u8 obj, bool vflip){
00656 PA_SetSpriteVflip(0, obj, vflip);
00657 PA_SetSpriteVflip(1, obj, vflip);
00658 }
00659
00660
00661
00662
00663
00664
00676 extern inline void PA_DualSetSpriteGfx(u8 obj, u16 *gfx){
00677 PA_SetSpriteGfx(0, obj, gfx[0]);
00678 PA_SetSpriteGfx(1, obj, gfx[1]);
00679 }
00680
00681
00682
00683
00684
00696 extern inline void PA_DualSetSpritePrio(u8 obj, u8 prio){
00697 PA_SetSpritePrio(0, obj, prio);
00698 PA_SetSpritePrio(1, obj, prio);
00699 }
00700
00701
00702
00703
00704
00716 extern inline void PA_DualCloneSprite(u8 obj, u8 target){
00717 PA_CloneSprite(0, obj, target);
00718 PA_CloneSprite(1, obj, target);
00719 }
00720
00721
00722
00723
00724
00725
00726
00747 extern inline void PA_DualSetSpriteAnimEx(u8 sprite, u8 lx, u8 ly, u8 ncolors, s16 animframe){
00748 PA_SetSpriteAnimEx(0, sprite, lx, ly, ncolors, animframe);
00749 PA_SetSpriteAnimEx(1, sprite, lx, ly, ncolors, animframe);
00750 }
00751
00752
00753
00754
00755
00767 extern inline void PA_DualSetSpriteAnim(u8 sprite, s16 animframe){
00768 u8 lx = PA_GetSpriteLx(0, sprite); u8 ly = PA_GetSpriteLy(0, sprite);
00769 bool ncolors = PA_GetSpriteColors(0, sprite);
00770 PA_SetSpriteAnimEx(0, sprite, lx, ly, ncolors, animframe);
00771 PA_SetSpriteAnimEx(1, sprite, lx, ly, ncolors, animframe);
00772 }
00773
00774
00775
00776
00777
00778
00779
00780
00804 extern inline void PA_DualSetSpritePixelEx(u8 sprite, u8 hsize, u8 n_colors, u8 x, u8 y, u8 color){
00805 PA_SetSpritePixelEx(0, sprite, hsize, n_colors, x, y, color);
00806 PA_SetSpritePixelEx(1, sprite, hsize, n_colors, x, y, color);
00807 }
00808
00809
00810
00811
00812
00813
00831 extern inline void PA_DualSetSpritePixel(u8 sprite, s16 x, s16 y, bool color){
00832 PA_DualSetSpritePixelEx(sprite, PA_GetSpriteLx(0, sprite), PA_GetSpriteColors(0, sprite), x, y, color);
00833 }
00834
00835
00836
00837
00838
00839
00841
00842
00843
00844
00845
00846
00847
00848
00849
00850
00851
00852
00853
00854
00855
00856
00857
00858
00859
00860
00861
00862 #endif
00863
00864