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

📄 spacegun.c

📁 十七种模拟器源代码 非常有用的作课程设计不可缺少的
💻 C
📖 第 1 页 / 共 3 页
字号:
    if(myy1<0){myy1=0;}
    if(myy1>127){myy1=127;}

    if(mouse_b&1) RAM[0x4400E] &= ~0x01;
    if(mouse_b&2) RAM[0x4400E] &= ~0x04;

    RAM[0xE2B4]=x1+128-64;
    RAM[0xE2B6]=myy1+128-64;}


else{

 /* User selects analog joystick control on fake dipswitch */
 if (RAM[0x44005] &0x20){

   /*------[Analog Joystick Hack]-------*/
   RAM[0xE2B4]=(-joy[0].stick[0].axis[0].pos)/2+128;
   RAM[0xE2B6]=joy[0].stick[0].axis[1].pos/2+128;

  }


 /* User selects digital control on fake dipswitch */
 if (RAM[0x44005] &0x10){

   /*-----[Player 1 Keyboard Hack - Slow]-----*/
   if  (RAM[0x44005]&0x08){
   if(((RAM[0x44010]&0x01)!=0)&&(myy1>0)){myy1-=1;}
   if(((RAM[0x44010]&0x02)!=0)&&(myy1<127)){myy1+=1;}
   if(((RAM[0x44010]&0x08)!=0)&&(x1>0)){x1-=1;}
   if(((RAM[0x44010]&0x04)!=0)&&(x1<127)){x1+=1;}
   }

   else{

   /*-----[Player 1 Keyboard Hack - Fast]-----*/
   if(((RAM[0x44010]&0x01)!=0)&&(myy1>0)){myy1-=2;}
   if(((RAM[0x44010]&0x02)!=0)&&(myy1<127)){myy1+=2;}
   if(((RAM[0x44010]&0x08)!=0)&&(x1>0)){x1-=2;}
   if(((RAM[0x44010]&0x04)!=0)&&(x1<127)){x1+=2;}
   }


   RAM[0xE2B4]=x1+128-64;
   RAM[0xE2B6]=myy1+128-64;

  }
 }



/*----------[End of Player 1 Gun Input Emulation]------------*/



   /*-----[Player 2 Keyboard Hack - Slow]-----*/
   if  (RAM[0x44005]&0x08){
   if(((RAM[0x44020]&0x01)!=0)&&(y2>0)){y2-=1;}
   if(((RAM[0x44020]&0x02)!=0)&&(y2<127)){y2+=1;}
   if(((RAM[0x44020]&0x08)!=0)&&(x2>0)){x2-=1;}
   if(((RAM[0x44020]&0x04)!=0)&&(x2<127)){x2+=1;}
   }

   else{

   /*-----[Player 2 Keyboard Hack - Fast]-----*/
   if(((RAM[0x44020]&0x01)!=0)&&(y2>0)){y2-=2;}
   if(((RAM[0x44020]&0x02)!=0)&&(y2<127)){y2+=2;}
   if(((RAM[0x44020]&0x08)!=0)&&(x2>0)){x2-=2;}
   if(((RAM[0x44020]&0x04)!=0)&&(x2<127)){x2+=2;}
   }

   /*----[Player 2 Write Positions]----*/

   RAM[0xE2B8]=x2+128-64;
   RAM[0xE2BA]=y2+128-64;


   /*------[EE-ROM Hack]------*/

   WriteLong(&RAM[0x0006+0x00], 0x00C00040);
   WriteLong(&RAM[0x0006+0x04], 0x80000002);
   WriteLong(&RAM[0x0006+0x08], 0x00C00040);
   WriteLong(&RAM[0x0006+0x0C], 0xE0000001);

   WriteLong(&RAM[0x0006+0x10], 0x00C00040);
   WriteLong(&RAM[0x0006+0x14], 0x80000002);
   WriteLong(&RAM[0x0006+0x18], 0x00C00040);
   WriteLong(&RAM[0x0006+0x1C], 0xE0000001);

   WriteLong(&RAM[0x0006+0x20], 0x00800080);
   WriteLong(&RAM[0x0006+0x24], 0x00800080);
   WriteLong(&RAM[0x0006+0x28], 0x80000002);
   WriteLong(&RAM[0x0006+0x2C], 0xE0000001);

   WriteLong(&RAM[0x0006+0x30], 0x80000002);
   WriteLong(&RAM[0x0006+0x34], 0xE0000001);

   WriteLong(&RAM[0x0006+0x38], 0x80000002);
   WriteLong(&RAM[0x0006+0x3C], 0xE0000001);

   WriteLong(&RAM[0x0006+0x40], 0x80000002);
   WriteLong(&RAM[0x0006+0x44], 0xE0000001);

   WriteLong(&RAM[0x0006+0x24], 0x00800080);

   /*----[Run the 68000's]----*/

   cpu_execute_cycles(CPU_68K_0, CPU_FRAME_MHz(16,60));
   cpu_interrupt(CPU_68K_0, 4);

   cpu_execute_cycles(CPU_68K_1, CPU_FRAME_MHz(16,60));
   cpu_interrupt(CPU_68K_1, 4);
   cpu_interrupt(CPU_68K_1, 5);
}

void DrawSpaceGun(void)
{
   int x,y,ta,zz;
   int zx,zy;
   UINT8 *MAP;

   ClearPaletteMap();

   // Init tc0100scn emulation
   // ------------------------

   tc0100scn_layer_count = 0;
   tc0100scn[0].ctrl = ReadWord(RAM_SCROLL+12);

   // BG0
   // ---

   render_tc0100scn_layer_mapped_flipy(0,0);

   // OBJECT LOW
   // ----------

   for(zz=0x24600-8;zz>=0x24000;zz-=8){

      if((RAM[zz+3]&0x80)!=0){

      zx=RAM[zz+4]&63;
      zy=(RAM[zz+1]>>1)&63;
      if((zx!=0)&&(zy!=0)){
         y=RAM[zz];
         if((RAM[zz+1]&1)!=0){y=0-((y^255)+1);}
         y=32+20+y;
         x=ReadWord(&RAM[zz+2])&0x1FF;
         if(x>400){x=0-((x^511)+1);}
         x=(320+(63-zx))-x;

         if((x>0)&&(y>0)&&(x<320+64)&&(y<240+64)){
            ta=ReadWord(&RAM[zz+6])&0xFFF;

            if(ta!=0){

            MAP_PALETTE_MAPPED_NEW(
               RAM[zz+5],
               16,
               MAP
            );

               if(GFX_SPR_SOLID[ta]==0){
                  if((RAM[zz+7]&0x80)==0){
                     if((RAM[zz+3]&0x40)==0){	Draw64x64_Trans_Mapped_Zoom2(&GFX_SPR[ta<<12],x,y,MAP,zx,zy);}
                     else{			Draw64x64_Trans_Mapped_Zoom2_FlipY(&GFX_SPR[ta<<12],x,y,MAP,zx,zy);}
                  }else{
                     if((RAM[zz+3]&0x40)==0){	Draw64x64_Trans_Mapped_Zoom2_FlipX(&GFX_SPR[ta<<12],x,y,MAP,zx,zy);}
                     else{			Draw64x64_Trans_Mapped_Zoom2_FlipXY(&GFX_SPR[ta<<12],x,y,MAP,zx,zy);}
                  }
               }
               else{
                  if((RAM[zz+7]&0x80)==0){
                     if((RAM[zz+3]&0x40)==0){	Draw64x64_Mapped_Zoom2(&GFX_SPR[ta<<12],x,y,MAP,zx,zy);}
                     else{			Draw64x64_Mapped_Zoom2_FlipY(&GFX_SPR[ta<<12],x,y,MAP,zx,zy);}
                  }else{
                     if((RAM[zz+3]&0x40)==0){	Draw64x64_Mapped_Zoom2_FlipX(&GFX_SPR[ta<<12],x,y,MAP,zx,zy);}
                     else{			Draw64x64_Mapped_Zoom2_FlipXY(&GFX_SPR[ta<<12],x,y,MAP,zx,zy);}
                  }
               }

            }
         }
      }
      }
   }

   // BG1
   // ---

   render_tc0100scn_layer_mapped_flipy(0,1);

   // OBJECT HIGH
   // -----------

   for(zz=0x24600-8;zz>=0x24000;zz-=8){

      if((RAM[zz+3]&0x80)==0){

      zx=RAM[zz+4]&63;
      zy=(RAM[zz+1]>>1)&63;
      if((zx!=0)&&(zy!=0)){
         y=RAM[zz];
         if((RAM[zz+1]&1)!=0){y=0-((y^255)+1);}
         y=32+20+y;
         x=ReadWord(&RAM[zz+2])&0x1FF;
         if(x>400){x=0-((x^511)+1);}
         x=(320+(63-zx))-x;

         if((x>0)&&(y>0)&&(x<320+64)&&(y<240+64)){
            ta=ReadWord(&RAM[zz+6])&0xFFF;

            if(ta!=0){

            MAP_PALETTE_MAPPED_NEW(
               RAM[zz+5],
               16,
               MAP
            );

               if(GFX_SPR_SOLID[ta]==0){
                  if((RAM[zz+7]&0x80)==0){
                     if((RAM[zz+3]&0x40)==0){	Draw64x64_Trans_Mapped_Zoom2(&GFX_SPR[ta<<12],x,y,MAP,zx,zy);}
                     else{			Draw64x64_Trans_Mapped_Zoom2_FlipY(&GFX_SPR[ta<<12],x,y,MAP,zx,zy);}
                  }else{
                     if((RAM[zz+3]&0x40)==0){	Draw64x64_Trans_Mapped_Zoom2_FlipX(&GFX_SPR[ta<<12],x,y,MAP,zx,zy);}
                     else{			Draw64x64_Trans_Mapped_Zoom2_FlipXY(&GFX_SPR[ta<<12],x,y,MAP,zx,zy);}
                  }
               }
               else{
                  if((RAM[zz+7]&0x80)==0){
                     if((RAM[zz+3]&0x40)==0){	Draw64x64_Mapped_Zoom2(&GFX_SPR[ta<<12],x,y,MAP,zx,zy);}
                     else{			Draw64x64_Mapped_Zoom2_FlipY(&GFX_SPR[ta<<12],x,y,MAP,zx,zy);}
                  }else{
                     if((RAM[zz+3]&0x40)==0){	Draw64x64_Mapped_Zoom2_FlipX(&GFX_SPR[ta<<12],x,y,MAP,zx,zy);}
                     else{			Draw64x64_Mapped_Zoom2_FlipXY(&GFX_SPR[ta<<12],x,y,MAP,zx,zy);}
                  }
               }

            }
         }
      }
      }
   }

   // FG0
   // ---

   render_tc0100scn_layer_mapped_flipy(0,2);

   // GUNS
   // ----

/*----------[Start of Gun Targetting]------------*/

if (RAM[0x44005] &0x40){
   // Player 2 Targetting
   x=(64+(((127-x2)*320)>>7))-7;
   y=(64+((y2*240)>>7))-7;
   if((x>48)&&(y>48)&&(x<320+64)&&(y<240+64)){
      Draw16x16_Trans(SpriteGun2,x,y,0);
   }
 }


if (RAM[0x44005] &0x80){
   // Player 1 Targetting
   x=(64+(((127-(RAM[0xE2B4]-64))*320)>>7))-7;
   y=(64+(((RAM[0xE2B6]-64)*240)>>7))-7;
   if((x>48)&&(y>48)&&(x<320+64)&&(y<240+64)){
      Draw16x16_Trans(SpriteGun1,x,y,0);
   }
 }


// Old Mouse targetting from Antiriad

/*
   x=(64+(319-x11))-7;
   y=(64+myy11)-7;
   if((x>48)&&(y>48)&&(x<320+64)&&(y<240+64)){
      Draw16x16_Trans(SpriteGun1,x,y,0);
   }
*/

/*----------[End of Gun Targetting]------------*/



   pal[254].r=0;
   pal[254].g=0;
   pal[254].b=0;

   pal[253].r=31;
   pal[253].g=31;
   pal[253].b=63;

   pal[252].r=63;
   pal[252].g=31;
   pal[252].b=31;

}

/*

Sprite List Format (8 bytes/sprite)
===================================

Byte | Bit(s) | Description
-----+76543210+--------------------
  0  |.xxxxxx.| ZoomY (0-63)
  0  |.......x| Y Position (High)
  1  |xxxxxxxx| Y Position (Low)
  2  |.x......| Flip Y Axis
  2  |x.......| Sprite:BG1 Priority
  2  |..?????x| X Position (High)
  3  |xxxxxxxx| X Position (Low)
  4  |xxxxxxxx| Palette Bank
  5  |..xxxxxx| ZoomX (0-63)
  6  |x.......| Flip X Axis?
  6  |.....xxx| Sprite Number (High)
  7  |xxxxxxxx| Sprite Number (Low)

*/

⌨️ 快捷键说明

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