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 + -
显示快捷键?