00001 #ifndef _PA_SpriteDual
00002 #define _PA_SpriteDual
00003
00004 extern s16 DualSpriteX[128];
00005
00012 #include "PA_Sprite.h"
00013
00014
00029 extern inline void PA_SetScreenSpace(s16 ScreenSpace){
00030 PA_ScreenSpace = 192 + ScreenSpace;
00031 }
00032
00033
00045 extern inline void PA_DualSetSpriteX(u8 obj, s16 x){
00046 PA_obj[0][obj].atr1 = PA_obj[1][obj].atr1 = (PA_obj[0][obj].atr1 & ALL_BUT(PA_OBJ_X)) + ((x) & PA_OBJ_X);
00047 DualSpriteX[obj] = x;
00048 }
00049
00050
00051
00052
00064 extern inline void PA_DualSetSpriteY(u8 obj, s16 y){
00065 if (y < 192) {
00066 PA_SetSpriteY(1, obj, y);
00067 PA_SetSpriteX(1, obj, DualSpriteX[obj]);
00068 }
00069 else PA_SetSpriteX(1, obj, 256);
00070 if (y > PA_ScreenSpace-64) {
00071 PA_SetSpriteY(0, obj, y - PA_ScreenSpace);
00072 PA_SetSpriteX(0, obj, DualSpriteX[obj]);
00073 }
00074 else PA_SetSpriteX(0, obj, 256);
00075 }
00076
00077
00078
00079
00080
00095 extern inline void PA_DualSetSpriteXY(u8 sprite, s16 x, s16 y) {
00096 PA_DualSetSpriteX(sprite, x);
00097 PA_DualSetSpriteY(sprite, y);
00098 }
00099
00100
00101
00102
00132 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) {
00133 PA_CreateSprite(0, obj_number, obj_data, obj_shape, obj_size, color_mode, palette, x, 192);
00134 PA_CreateSprite(1, obj_number, obj_data, obj_shape, obj_size, color_mode, palette, x, 192);
00135 PA_DualSetSpriteXY(obj_number, x, y);
00136 };
00137
00185 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, u8 mosaic, u8 hflip, u8 vflip, u8 prio, u8 dblsize, s16 x, s16 y){
00186 PA_CreateSpriteEx(0, obj_number, obj_data, obj_shape, obj_size, color_mode, palette, obj_mode, mosaic, hflip, vflip, prio, dblsize, x, 192);
00187 PA_CreateSpriteEx(1, obj_number, obj_data, obj_shape, obj_size, color_mode, palette, obj_mode, mosaic, hflip, vflip, prio, dblsize, x, 192);
00188 PA_DualSetSpriteXY(obj_number, x, y);
00189 }
00190
00191
00192
00193
00194
00233 extern inline void PA_DualCreate16bitSpriteEx(u8 obj_number, void* obj_data, u8 obj_shape, u8 obj_size, u8 mosaic, u8 hflip, u8 vflip, u8 prio, u8 dblsize, s16 x, s16 y){
00234 u16 mem_size = PA_obj_sizes[obj_size][obj_shape] << 1;
00235 u16 *gfx = (u16*)malloc(mem_size);
00236 mem_size = mem_size >> 1;
00237 s32 i;
00238 u16 *data = (u16*)obj_data;
00239 for (i = 0; i < mem_size; i++) gfx[i] = data[i] + (1 << 15);
00240
00241 PA_obj[0][obj_number].atr2 = PA_CreateGfx(0, gfx, obj_shape, obj_size, 2) + (prio << 10) + (15 << 12);
00242 PA_obj[1][obj_number].atr2 = PA_CreateGfx(1, gfx, obj_shape, obj_size, 2) + (prio << 10) + (15 << 12);
00243 PA_obj[1][obj_number].atr0 = PA_obj[0][obj_number].atr0 = (192 & PA_OBJ_Y) + (dblsize << 9) + (3 << 10) + (mosaic << 12) + (0 << 13) + (obj_shape << 14);
00244 PA_obj[1][obj_number].atr1 = PA_obj[0][obj_number].atr1 = (x & PA_OBJ_X) + (hflip << 12) + (vflip << 13) + (obj_size << 14);
00245 PA_DualSetSpriteXY(obj_number, x, y);
00246
00247 free(gfx);
00248 }
00249
00250
00251
00275 extern inline void PA_DualCreate16bitSprite(u8 obj_number, void* obj_data, u8 obj_shape, u8 obj_size, s16 x, s16 y){
00276 PA_DualCreate16bitSpriteEx(obj_number, obj_data, obj_shape, obj_size, 0, 0, 0, 0, 0, x, y);
00277 }
00278
00279
00280
00281
00311 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) {
00312 PA_CreateSpriteFromGfx(0, obj_number, obj_gfx[0], obj_shape, obj_size, color_mode, palette, x, 192);
00313 PA_CreateSpriteFromGfx(1, obj_number, obj_gfx[1], obj_shape, obj_size, color_mode, palette, x, 192);
00314 PA_DualSetSpriteXY(obj_number, x, y);
00315 }
00316
00364 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, u8 mosaic, u8 hflip, u8 vflip, u8 prio, u8 dblsize, s16 x, s16 y) {
00365 PA_CreateSpriteExFromGfx(0, obj_number, obj_gfx[0], obj_shape, obj_size, color_mode, palette, obj_mode, mosaic, hflip, vflip, prio, dblsize, x, 192);
00366 PA_CreateSpriteExFromGfx(1, obj_number, obj_gfx[1], obj_shape, obj_size, color_mode, palette, obj_mode, mosaic, hflip, vflip, prio, dblsize, x, 192);
00367 PA_DualSetSpriteXY(obj_number, x, y);
00368 }
00369
00370
00382 extern inline void PA_DualUpdateSpriteGfx(u8 obj_number, void *obj_data){
00383 PA_UpdateSpriteGfx(0, obj_number, obj_data);
00384 PA_UpdateSpriteGfx(1, obj_number, obj_data);
00385 }
00386
00387
00399 extern inline void PA_DualUpdateGfx(u16 gfx_number, void *obj_data){
00400 PA_UpdateGfx(0, gfx_number, obj_data);
00401 PA_UpdateGfx(1, gfx_number, obj_data);
00402 }
00403
00404
00405
00406
00415 extern inline void PA_DualDeleteSprite(u8 obj_number){
00416 PA_DeleteSprite(0, obj_number);
00417 PA_DeleteSprite(1, obj_number);
00418 }
00419
00420
00421
00433 extern inline void PA_DualSetSpriteRotEnable(u8 sprite, u8 rotset){
00434 PA_SetSpriteRotEnable(0, sprite, rotset);
00435 PA_SetSpriteRotEnable(1, sprite, rotset);
00436 }
00437
00438
00439
00448 extern inline void PA_DualSetSpriteRotDisable(u8 sprite){
00449 PA_SetSpriteRotDisable(0, sprite);
00450 PA_SetSpriteRotDisable(1, sprite);
00451 }
00452
00471 extern inline void PA_DualSetRotset(u8 rotset, s16 angle, u16 zoomx, u16 zoomy) {
00472 u8 obj_num = (rotset << 2);
00473 PA_obj[0][obj_num].atr3 = PA_obj[1][obj_num].atr3 = (PA_Cos(angle) * zoomx) >> 8;
00474 PA_obj[0][obj_num + 1].atr3 = PA_obj[1][obj_num + 1].atr3 = (-PA_Sin(angle) * zoomy) >> 8;
00475 PA_obj[0][obj_num + 2].atr3 = PA_obj[1][obj_num + 2].atr3 = (PA_Sin(angle) * zoomx) >> 8;
00476 PA_obj[0][obj_num + 2].atr3 = PA_obj[1][obj_num + 2].atr3 = (PA_Sin(angle) * zoomx) >> 8;
00477 PA_obj[0][obj_num + 3].atr3 = PA_obj[1][obj_num + 3].atr3 = (PA_Cos(angle) * zoomy) >> 8;
00478 }
00479
00491 extern inline void PA_DualSetRotsetNoZoom(u8 rotset, s16 angle) {
00492 u8 obj_num = (rotset << 2);
00493 PA_obj[0][obj_num].atr3 = PA_obj[1][obj_num].atr3 = PA_Cos(angle);
00494 PA_obj[0][obj_num + 1].atr3 = PA_obj[1][obj_num + 1].atr3 = -PA_Sin(angle);
00495 PA_obj[0][obj_num + 2].atr3 = PA_obj[1][obj_num + 2].atr3 = PA_Sin(angle);
00496 PA_obj[0][obj_num + 3].atr3 = PA_obj[1][obj_num + 3].atr3 = PA_Cos(angle);
00497 }
00498
00499
00514 extern inline void PA_DualSetRotsetNoAngle(u8 rotset, u16 zoomx, u16 zoomy) {
00515 u8 obj_num = (rotset << 2);
00516 PA_obj[0][obj_num].atr3 = PA_obj[1][obj_num].atr3 = zoomx;
00517 PA_obj[0][obj_num + 1].atr3 = PA_obj[1][obj_num + 1].atr3 = 0;
00518 PA_obj[0][obj_num + 2].atr3 = PA_obj[1][obj_num + 2].atr3 = 0;
00519 PA_obj[0][obj_num + 3].atr3 = PA_obj[1][obj_num + 3].atr3 = zoomy;
00520 }
00521
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, u8 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, u8 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, u8 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, u8 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, u8 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
00765 extern inline void PA_DualSetSpriteAnim(u8 sprite, s16 animframe){
00766 u8 lx = PA_GetSpriteLx(0, sprite); u8 ly = PA_GetSpriteLy(0, sprite);
00767 u8 ncolors = PA_GetSpriteColors(0, sprite);
00768 PA_SetSpriteAnimEx(0, sprite, lx, ly, ncolors, animframe);
00769 PA_SetSpriteAnimEx(1, sprite, lx, ly, ncolors, animframe);
00770 }
00771
00772
00773
00774
00798 extern inline void PA_DualStartSpriteAnimEx(u8 sprite, s16 firstframe, s16 lastframe, s16 speed, u8 type, s16 ncycles){
00799 PA_StartSpriteAnimEx(0, sprite, firstframe, lastframe, speed, type, ncycles);
00800 PA_StartSpriteAnimEx(1, sprite, firstframe, lastframe, speed, type, ncycles);
00801 }
00802
00803
00804
00822 extern inline void PA_DualStartSpriteAnim(u8 sprite, s16 firstframe, s16 lastframe, s16 speed){
00823 PA_StartSpriteAnim(0, sprite, firstframe, lastframe, speed);
00824 PA_StartSpriteAnim(1, sprite, firstframe, lastframe, speed);
00825 }
00826
00827
00828
00837 extern inline void PA_DualStopSpriteAnim(u8 sprite)
00838 {
00839 PA_StopSpriteAnim(0, sprite);
00840 PA_StopSpriteAnim(1, sprite);
00841 }
00842
00843
00855 extern inline void PA_DualSetSpriteAnimFrame(u8 sprite, u16 frame)
00856 {
00857 PA_SetSpriteAnimFrame(0, sprite, frame);
00858 PA_SetSpriteAnimFrame(1, sprite, frame);
00859 }
00860
00861
00870 extern inline u16 PA_DualGetSpriteAnimFrame(u8 sprite)
00871 {
00872 return spriteanims[0][sprite].currentframe;
00873 }
00874
00875
00876
00888 extern inline void PA_DualSetSpriteAnimSpeed(u8 sprite, s16 speed)
00889 {
00890 PA_SetSpriteAnimSpeed(0, sprite, speed);
00891 PA_SetSpriteAnimSpeed(1, sprite, speed);
00892 }
00893
00894
00895
00896
00905 extern inline u16 PA_DualGetSpriteAnimSpeed(u8 sprite)
00906 {
00907 return spriteanims[0][sprite].speed;
00908 }
00909
00910
00911
00923 extern inline void PA_DualSpriteAnimPause(u8 sprite, u8 pause)
00924 {
00925 PA_SpriteAnimPause(0, sprite, pause);
00926 PA_SpriteAnimPause(1, sprite, pause);
00927 }
00928
00929
00930
00931
00932
00933
00957
00958
00959
00960
00961
00962
00963
00964
00965
00966
00984
00985
00986
00987
00988
00989
00990
00991
00992
00994
00995
00996
00997
00998
00999
01000
01001
01002
01003
01004
01005
01006
01007 #endif
01008
01009