obj.c

来自「redboy for gba 是BPNS为GBA编写的一个小软件。软件的邹形是B」· C语言 代码 · 共 138 行

C
138
字号
#include <csagb.h>
#include <rb_stdio.h>
extern const unsigned char FONTS_ST[];
extern const u8 ascii7[95][10];
extern const u8 ascii[256][8];
extern const u8 font_mask[];
extern u8 rb_error;
#define myobj_cnt 15
u8 myobj[myobj_cnt];
#define myobj_yp 125
extern u32 TM_CN;
extern u16 rb_co;
s16 myobj_xp=230;
const u8 myobj_y[]={5,6,7,6,5,4,3,4};
const u16 myobj_pal[16]={
   RGB(31,31,31),RGB(10,14,14),RGB(10,16,16),RGB(10,18,18),RGB(10,20,20),
   RGB(10,22,22),RGB(10,24,24),RGB(10,26,26),RGB(10,27,27),RGB(10,28,28),
   RGB(10,29,29),RGB(10,30,30),
};
   
void creat_obj_dat(char ch,u32 *odat,u8 step)
{
   int i,j;
   u8 mask=1;
   u8 co=2;
   u8 bit;
   for (i=0;i<8;i++)
   {
      odat[i]=0;
      bit=ascii[ch][i];
      for (j=0;j<8;j++) odat[i]=(odat[i]<<4)+(bit&font_mask[j]?co:0);
      co+=step;
   }
}
void myobj_updat()
{
   u8 i;
   int xp;
   rb_co++;
   if (rb_co&1) return;//{CS_ShowSprites();return;}
   rb_error=(rb_error+1)&0x07;
   myobj_xp-=2;
   if (myobj_xp<-120) myobj_xp+=240;
   for (i=0;i<myobj_cnt;i++)
   {
      xp=myobj_xp+(i<<3);
      if (xp<0) xp+=240;
      CS_MoveObj(myobj[i],xp,myobj_yp+myobj_y[(i+rb_error)&0x07]);
   }
   CS_ShowSprites();
}

void hiden_myobj()
{
   int i;
   for (i=0;i<myobj_cnt;i++) CS_MoveObj(myobj[i],-10,-10);
   CS_ShowSprites();
}
void creat_myobj()
{
   int i=0;
   u32 odat[8];
   char str[]="<REDBOY FOR GBA";
   while (str[i]!='\0')
   {
      creat_obj_dat(str[i],odat,1);
      CS_LoadObjChar((u16 *)odat,32,MODE_3,i);
      myobj[i]=CS_CreateObj(_M_MODE3_OBJ_CHARNO(i),OAM_OBJ_NORMAL,
               OAM_AFFINE_NONE,OAM_SQUARE,OAM_SIZE_8x8,
               true,0,FALSE,FALSE,FALSE,0,-10,-10);
      i++;
   }
}
void myobj_start()
{
   CS_LoadObjPal16(myobj_pal,0);
   creat_myobj();
   CS_OpenVBlank();
   CS_SetIntrFunc(V_BLANK_INTR_FLAG,myobj_updat);
}
void myobj_restart()
{
   CS_OpenVBlank();
   CS_SetIntrFunc(V_BLANK_INTR_FLAG,myobj_updat);
}
void myobj_stop()
{
   hiden_myobj();
   CS_CloseVBlank();
}
void chang_myobj_pal(u16 *pal)
{
   CS_LoadObjPal16(pal,0);
}

int creat_str_obj(char *str,u8 *sid,u8 step,s16 xp,u16 yp)
{
   int i=0;
   u32 odat[8];
   while (str[i]!='\0')
   {
      creat_obj_dat(str[i],odat,step);
      CS_LoadObjChar((u16 *)odat,32,MODE_3,i);
      sid[i]=CS_CreateObj(_M_MODE3_OBJ_CHARNO(i),OAM_OBJ_NORMAL,
               OAM_AFFINE_NONE,OAM_SQUARE,OAM_SIZE_8x8,
               true,0,FALSE,FALSE,FALSE,0,xp+i*8,yp);
      i++;//Rprint(RGB(30,30,0),"s");
   }
   return i;
}

void myobj_new_str(char *str,u8 step)//重新载入数据
{
   int i=0,j;
   u32 odat[8];
   while (str[i]!='\0' && i<myobj_cnt)
   {
      creat_obj_dat(str[i],odat,step);
      CS_LoadObjChar((u16 *)odat,32,MODE_3,i);//重新载入数据
      i++;
   }
   for (j=i;j<myobj_cnt;j++)//补为空格
   {
      creat_obj_dat(' ',odat,step);
      CS_LoadObjChar((u16 *)odat,32,MODE_3,j);//重新载入数据
   }
}
void show_obj(int xp,int yp)
{
   int i;
   for (i=0;i<myobj_cnt;i++)
   {
      xp+=8;
      CS_MoveObj(myobj[i],xp,yp);
   }
   CS_ShowSprites();
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?