📄 spacegun.c
字号:
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 + -