⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 robokid.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 3 页
字号:
  0x0000+0x0000+0x0100+0x0000,	// 0x40  0x0800+0x0000+0x0100+0x0000,	// 0x50  0x0000+0x0400+0x0100+0x0000,	// 0x60  0x0800+0x0400+0x0100+0x0000,	// 0x70  0x0000+0x0000+0x0000+0x0200,	// 0x80  0x0800+0x0000+0x0000+0x0200,	// 0x90  0x0000+0x0400+0x0000+0x0200,	// 0xA0  0x0800+0x0400+0x0000+0x0200,	// 0xB0  0x0000+0x0000+0x0100+0x0200,	// 0xC0  0x0800+0x0000+0x0100+0x0200,	// 0xD0  0x0000+0x0400+0x0100+0x0200,	// 0xE0  0x0800+0x0400+0x0100+0x0200,	// 0xF0};void DrawRoboKid(void){   int zz,zzz,zzzz,x16,y16,x,y,ta;   int xx,yy,rr;   UINT8 *map;   ClearPaletteMap();   // BG0   // ---   if(RAM_BG0!=NULL){   zzz=(ReadWord(&SCR_BG0[0]));   zzzz =((zzz&0x00F0)>>4)<<1;                  // X Offset (16-255)   zzzz+=((zzz&0x0100)>>4)<<6;                  // X Offset (256-511)   x16=zzz&15;                                  // X Offset (0-15)   zzz=(ReadWord(&SCR_BG0[2])+32);   zzzz+=((zzz&0x01F0)>>4)<<5;                  // Y Offset (16-511)   y16=zzz&15;                                  // Y Offset (0-15)   zzzz=zzzz&0x7FF;   zz=zzzz;   for(y=(32-y16);y<(192+32);y+=16){   for(x=(32-x16);x<(256+32);x+=16){      ta = RAM_BG0[zz+0] | bg_map[RAM_BG0[zz+1]>>4];         MAP_PALETTE_MAPPED_NEW(            (RAM_BG0[zz+1]&0x0F)|mask_bg0,            16,            map         );         Draw16x16_Mapped_Rot(&GFX_BG0[ta<<8], x, y, map);   zz+=2;   if((zz&0x1F)==0){zz+=0x3E0;zz&=0x7FF;}   }   zzzz+=0x20;   if((zzzz&0x3E0)==0){zzzz-=0x400;}   zzzz&=0x7FF;   zz=zzzz;   }   }   // BG1   // ---   if(RAM_BG1!=NULL){   zzz=(ReadWord(&SCR_BG1[0]));   zzzz =((zzz&0x00F0)>>4)<<1;                  // X Offset (16-255)   zzzz+=((zzz&0x0100)>>4)<<6;                  // X Offset (256-511)   x16=zzz&15;                                  // X Offset (0-15)   zzz=(ReadWord(&SCR_BG1[2])+32);   zzzz+=((zzz&0x01F0)>>4)<<5;                  // Y Offset (16-511)   y16=zzz&15;                                  // Y Offset (0-15)   zzzz=zzzz&0x7FF;   zz=zzzz;   for(y=(32-y16);y<(192+32);y+=16){   for(x=(32-x16);x<(256+32);x+=16){      ta = RAM_BG1[zz+0] | bg_map[RAM_BG1[zz+1]>>4];      if(BG1_Mask[ta]!=0){			// No pixels; skip         MAP_PALETTE_MAPPED_NEW(            (RAM_BG1[zz+1]&0x0F)|mask_bg1,            16,            map         );         if(BG1_Mask[ta]==1){				// Some pixels; trans         Draw16x16_Trans_Mapped_Rot(&GFX_BG1[ta<<8], x, y, map);         }         else{						// all pixels; solid         Draw16x16_Mapped_Rot(&GFX_BG1[ta<<8], x, y, map);         }      }   zz+=2;   if((zz&0x1F)==0){zz+=0x3E0;zz&=0x7FF;}   }   zzzz+=0x20;   if((zzzz&0x3E0)==0){zzzz-=0x400;}   zzzz&=0x7FF;   zz=zzzz;   }   }   // BG2   // ---   if(RAM_BG2!=NULL){   zzz=(ReadWord(&SCR_BG2[0]));   zzzz =((zzz&0x00F0)>>4)<<1;                  // X Offset (16-255)   zzzz+=((zzz&0x0100)>>4)<<6;                  // X Offset (256-511)   x16=zzz&15;                                  // X Offset (0-15)   zzz=(ReadWord(&SCR_BG2[2])+32);   zzzz+=((zzz&0x01F0)>>4)<<5;                  // Y Offset (16-511)   y16=zzz&15;                                  // Y Offset (0-15)   zzzz=zzzz&0x7FF;   zz=zzzz;   for(y=(32-y16);y<(192+32);y+=16){   for(x=(32-x16);x<(256+32);x+=16){      ta = RAM_BG2[zz+0] | bg_map[RAM_BG2[zz+1]>>4];      if(BG2_Mask[ta]!=0){			// No pixels; skip         MAP_PALETTE_MAPPED_NEW(            (RAM_BG2[zz+1]&0x0F)|mask_bg2,            16,            map         );         if(BG2_Mask[ta]==1){				// Some pixels; trans         Draw16x16_Trans_Mapped_Rot(&GFX_BG2[ta<<8], x, y, map);         }         else{						// all pixels; solid         Draw16x16_Mapped_Rot(&GFX_BG2[ta<<8], x, y, map);         }      }   zz+=2;   if((zz&0x1F)==0){zz+=0x3E0;zz&=0x7FF;}   }   zzzz+=0x20;   if((zzzz&0x3E0)==0){zzzz-=0x400;}   zzzz&=0x7FF;   zz=zzzz;   }   }   // OBJECT   // ------   for(zz=0x0000;zz<0x0600;zz+=16){      if((RAM_SPR[zz+0x0D]&2)!=0){      x = (32 + RAM_SPR[zz+0x0C] + ((RAM_SPR[zz+0x0D]<<8)&0x0100))&0x1FF;      y = ( 0 + RAM_SPR[zz+0x0B])&0x0FF;      ta = RAM_SPR[zz+0x0E] | ((RAM_SPR[zz+0x0D]<<2)&0x0300) | ((RAM_SPR[zz+0x0D]<<7)&0x0400);      MAP_PALETTE_MAPPED_NEW(         (RAM_SPR[zz+0x0F]&0x0F)|mask_spr,         16,         map      );      if((RAM_SPR[zz+0x0D]&4)!=0){         switch(RAM_SPR[zz+0x0D]&0x30){         case 0x00:         yy=2;         rr=y;         do{         xx=2;         do{         if((x>16)&&(y>16)&&(x<256+32)&&(y<192+32)){         if(SPR_Mask[ta]!=0){			// No pixels; skip         if(SPR_Mask[ta]==1) Draw16x16_Trans_Mapped_Rot(&GFX_SPR[ta<<8], x, y, map);         else                Draw16x16_Mapped_Rot(      &GFX_SPR[ta<<8], x, y, map);          }         }         ta++;         y=(y+16)&0xFF;         }while(--xx);         x=(x+16)&0x1FF;         y=rr;         }while(--yy);         break;         case 0x10:         x+=16;         yy=2;         rr=y;         do{         xx=2;         do{         if((x>16)&&(y>16)&&(x<256+32)&&(y<192+32)){         if(SPR_Mask[ta]!=0){			// No pixels; skip         if(SPR_Mask[ta]==1) Draw16x16_Trans_Mapped_FlipY_Rot(&GFX_SPR[ta<<8], x, y, map);         else                Draw16x16_Mapped_FlipY_Rot(      &GFX_SPR[ta<<8], x, y, map);          }         }         ta++;         y=(y+16)&0xFF;         }while(--xx);         x=(x-16)&0x1FF;         y=rr;         }while(--yy);         break;         case 0x20:         y+=16;         yy=2;         rr=y;         do{         xx=2;         do{         if((x>16)&&(y>16)&&(x<256+32)&&(y<192+32)){         if(SPR_Mask[ta]!=0){			// No pixels; skip         if(SPR_Mask[ta]==1) Draw16x16_Trans_Mapped_FlipX_Rot(&GFX_SPR[ta<<8], x, y, map);         else                Draw16x16_Mapped_FlipX_Rot(      &GFX_SPR[ta<<8], x, y, map);          }         }         ta++;         y=(y-16)&0xFF;         }while(--xx);         x=(x+16)&0x1FF;         y=rr;         }while(--yy);         break;         case 0x30:         x+=16;         y+=16;         yy=2;         rr=y;         do{         xx=2;         do{         if((x>16)&&(y>16)&&(x<256+32)&&(y<192+32)){         if(SPR_Mask[ta]!=0){			// No pixels; skip         if(SPR_Mask[ta]==1) Draw16x16_Trans_Mapped_FlipXY_Rot(&GFX_SPR[ta<<8], x, y, map);         else                Draw16x16_Mapped_FlipXY_Rot(      &GFX_SPR[ta<<8], x, y, map);          }         }         ta++;         y=(y-16)&0xFF;         }while(--xx);         x=(x-16)&0x1FF;         y=rr;         }while(--yy);         break;         }      }      else{         if((x>16)&&(y>16)&&(x<256+32)&&(y<192+32)){         if(SPR_Mask[ta]!=0){			// No pixels; skip         if(SPR_Mask[ta]==1){				// Some pixels; trans            switch(RAM_SPR[zz+0x0D]&0x30){            case 0x00: Draw16x16_Trans_Mapped_Rot(&GFX_SPR[ta<<8], x, y, map);        break;            case 0x10: Draw16x16_Trans_Mapped_FlipY_Rot(&GFX_SPR[ta<<8], x, y, map);  break;            case 0x20: Draw16x16_Trans_Mapped_FlipX_Rot(&GFX_SPR[ta<<8], x, y, map);  break;            case 0x30: Draw16x16_Trans_Mapped_FlipXY_Rot(&GFX_SPR[ta<<8], x, y, map); break;            }         }         else{						// all pixels; solid            switch(RAM_SPR[zz+0x0D]&0x30){            case 0x00: Draw16x16_Mapped_Rot(&GFX_SPR[ta<<8], x, y, map);        break;            case 0x10: Draw16x16_Mapped_FlipY_Rot(&GFX_SPR[ta<<8], x, y, map);  break;            case 0x20: Draw16x16_Mapped_FlipX_Rot(&GFX_SPR[ta<<8], x, y, map);  break;            case 0x30: Draw16x16_Mapped_FlipXY_Rot(&GFX_SPR[ta<<8], x, y, map); break;            }         }         }         }      }      }   }   // FG0   // ---   MAKE_SCROLL_256x256_2_8(       0,       32   );   START_SCROLL_256x256_2_8(32,32,256,192);      ta = RAM_FG0[0+zz] | ((RAM_FG0[1+zz]<<2)&0x0300);      if(FG0_Mask[ta]!=0){			// No pixels; skip         MAP_PALETTE_MAPPED_NEW(            (RAM_FG0[1+zz]&0x0F)|mask_fg0,            16,            map         );         if(FG0_Mask[ta]==1){				// Some pixels; trans            switch(RAM_FG0[1+zz]&0x30){            case 0x00: Draw8x8_Trans_Mapped_Rot(&GFX_FG0[ta<<6], x, y, map);        break;            case 0x10: Draw8x8_Trans_Mapped_FlipY_Rot(&GFX_FG0[ta<<6], x, y, map);  break;            case 0x20: Draw8x8_Trans_Mapped_FlipX_Rot(&GFX_FG0[ta<<6], x, y, map);  break;            case 0x30: Draw8x8_Trans_Mapped_FlipXY_Rot(&GFX_FG0[ta<<6], x, y, map); break;            }         }         else{						// all pixels; solid            switch(RAM_FG0[1+zz]&0x30){            case 0x00: Draw8x8_Mapped_Rot(&GFX_FG0[ta<<6], x, y, map);        break;            case 0x10: Draw8x8_Mapped_FlipY_Rot(&GFX_FG0[ta<<6], x, y, map);  break;            case 0x20: Draw8x8_Mapped_FlipX_Rot(&GFX_FG0[ta<<6], x, y, map);  break;            case 0x30: Draw8x8_Mapped_FlipXY_Rot(&GFX_FG0[ta<<6], x, y, map); break;            }         }      }   END_SCROLL_256x256_2_8();}/*nnhv.????.nnnn.nnnn*/

⌨️ 快捷键说明

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