📄 sector.c
字号:
break;
}
}
void checkplayerhurt(struct player_struct *p,short j)
{
if( (j&49152) == 49152 )
{
j &= (MAXSPRITES-1);
switch(sprite[j].picnum)
{
case CACTUS:
if(p->hurt_delay < 8 )
{
sprite[p->i].extra -= 5;
p->hurt_delay = 16;
p->pals_time = 32;
p->pals[0] = 32;
p->pals[1] = 0;
p->pals[2] = 0;
spritesound(DUKE_LONGTERM_PAIN,p->i);
}
break;
}
return;
}
if( (j&49152) != 32768) return;
j &= (MAXWALLS-1);
if( p->hurt_delay > 0 ) p->hurt_delay--;
else if( wall[j].cstat&85 ) switch(wall[j].overpicnum)
{
case W_FORCEFIELD:
case W_FORCEFIELD+1:
case W_FORCEFIELD+2:
sprite[p->i].extra -= 5;
p->hurt_delay = 16;
p->pals_time = 32;
p->pals[0] = 32;
p->pals[1] = 0;
p->pals[2] = 0;
p->posxv = -(sintable[(p->ang+512)&2047]<<8);
p->posyv = -(sintable[(p->ang)&2047]<<8);
spritesound(DUKE_LONGTERM_PAIN,p->i);
checkhitwall(p->i,j,
p->posx+(sintable[(p->ang+512)&2047]>>9),
p->posy+(sintable[p->ang&2047]>>9),
p->posz,-1);
break;
case BIGFORCE:
p->hurt_delay = 26;
checkhitwall(p->i,j,
p->posx+(sintable[(p->ang+512)&2047]>>9),
p->posy+(sintable[p->ang&2047]>>9),
p->posz,-1);
break;
}
}
char checkhitceiling(short sn)
{
short i, j, q, darkestwall, darkestceiling;
signed char nfloors,nceilings;
walltype *wal;
switch(sector[sn].ceilingpicnum)
{
case WALLLIGHT1:
case WALLLIGHT2:
case WALLLIGHT3:
case WALLLIGHT4:
case TECHLIGHT2:
case TECHLIGHT4:
ceilingglass(ps[myconnectindex].i,sn,10);
spritesound(GLASS_BREAKING,ps[screenpeek].i);
if(sector[sn].ceilingpicnum == WALLLIGHT1)
sector[sn].ceilingpicnum = WALLLIGHTBUST1;
if(sector[sn].ceilingpicnum == WALLLIGHT2)
sector[sn].ceilingpicnum = WALLLIGHTBUST2;
if(sector[sn].ceilingpicnum == WALLLIGHT3)
sector[sn].ceilingpicnum = WALLLIGHTBUST3;
if(sector[sn].ceilingpicnum == WALLLIGHT4)
sector[sn].ceilingpicnum = WALLLIGHTBUST4;
if(sector[sn].ceilingpicnum == TECHLIGHT2)
sector[sn].ceilingpicnum = TECHLIGHTBUST2;
if(sector[sn].ceilingpicnum == TECHLIGHT4)
sector[sn].ceilingpicnum = TECHLIGHTBUST4;
if(!sector[sn].hitag)
{
i = headspritesect[sn];
while(i >= 0)
{
if( PN == SECTOREFFECTOR && SLT == 12 )
{
j = headspritestat[3];
while(j >= 0)
{
if( sprite[j].hitag == SHT )
hittype[j].temp_data[3] = 1;
j = nextspritestat[j];
}
break;
}
i = nextspritesect[i];
}
}
i = headspritestat[3];
j = TRAND&1;
while(i >= 0)
{
if(SHT == (sector[sn].hitag) && SLT == 3 )
{
T3 = j;
T5 = 1;
}
i = nextspritestat[i];
}
return 1;
}
return 0;
}
void checkhitsprite(short i,short sn)
{
short j, k, l, nextj, p;
spritetype *s;
i &= (MAXSPRITES-1);
switch(PN)
{
case OCEANSPRITE1:
case OCEANSPRITE2:
case OCEANSPRITE3:
case OCEANSPRITE4:
case OCEANSPRITE5:
spawn(i,SMALLSMOKE);
deletesprite(i);
break;
case QUEBALL:
case STRIPEBALL:
if(sprite[sn].picnum == QUEBALL || sprite[sn].picnum == STRIPEBALL)
{
sprite[sn].xvel = (sprite[i].xvel>>1)+(sprite[i].xvel>>2);
sprite[sn].ang -= (SA<<1)+1024;
SA = getangle(SX-sprite[sn].x,SY-sprite[sn].y)-512;
if(Sound[POOLBALLHIT].num < 2)
spritesound(POOLBALLHIT,i);
}
else
{
if( TRAND&3 )
{
sprite[i].xvel = 164;
sprite[i].ang = sprite[sn].ang;
}
else
{
lotsofglass(i,-1,3);
deletesprite(i);
}
}
break;
case TREE1:
case TREE2:
case TIRE:
case CONE:
case BOX:
switch(sprite[sn].picnum)
{
case RADIUSEXPLOSION:
case RPG:
case FIRELASER:
case HYDRENT:
case HEAVYHBOMB:
if(T1 == 0)
{
CS &= ~257;
T1 = 1;
spawn(i,BURNING);
}
break;
}
break;
case CACTUS:
// case CACTUSBROKE:
switch(sprite[sn].picnum)
{
case RADIUSEXPLOSION:
case RPG:
case FIRELASER:
case HYDRENT:
case HEAVYHBOMB:
for(k=0;k<64;k++)
{
j = EGS(SECT,SX,SY,SZ-(TRAND%(48<<8)),SCRAP3+(TRAND&3),-8,48,48,TRAND&2047,(TRAND&63)+64,-(TRAND&4095)-(sprite[i].zvel>>2),i,5);
sprite[j].pal = 8;
}
if(PN == CACTUS)
PN = CACTUSBROKE;
CS &= ~257;
// else deletesprite(i);
break;
}
break;
case HANGLIGHT:
case GENERICPOLE2:
for(k=0;k<6;k++)
EGS(SECT,SX,SY,SZ-(8<<8),SCRAP1+(TRAND&15),-8,48,48,TRAND&2047,(TRAND&63)+64,-(TRAND&4095)-(sprite[i].zvel>>2),i,5);
spritesound(GLASS_HEAVYBREAK,i);
deletesprite(i);
break;
case FANSPRITE:
PN = FANSPRITEBROKE;
CS &= (65535-257);
if( sector[SECT].floorpicnum == FANSHADOW )
sector[SECT].floorpicnum = FANSHADOWBROKE;
spritesound(GLASS_HEAVYBREAK,i);
s = &sprite[i];
for(j=0;j<16;j++) RANDOMSCRAP;
break;
case WATERFOUNTAIN:
case WATERFOUNTAIN+1:
case WATERFOUNTAIN+2:
case WATERFOUNTAIN+3:
PN = WATERFOUNTAINBROKE;
spawn(i,TOILETWATER);
break;
case SATELITE:
case FUELPOD:
case SOLARPANNEL:
case ANTENNA:
if(sprite[sn].extra != *actorscrptr[SHOTSPARK1] )
{
for(j=0;j<15;j++)
EGS(SECT,SX,SY,sector[SECT].floorz-(12<<8)-(j<<9),SCRAP1+(TRAND&15),-8,64,64,
TRAND&2047,(TRAND&127)+64,-(TRAND&511)-256,i,5);
spawn(i,EXPLOSION2);
deletesprite(i);
}
break;
case BOTTLE1:
case BOTTLE2:
case BOTTLE3:
case BOTTLE4:
case BOTTLE5:
case BOTTLE6:
case BOTTLE8:
case BOTTLE10:
case BOTTLE11:
case BOTTLE12:
case BOTTLE13:
case BOTTLE14:
case BOTTLE15:
case BOTTLE16:
case BOTTLE17:
case BOTTLE18:
case BOTTLE19:
case WATERFOUNTAINBROKE:
case DOMELITE:
case SUSHIPLATE1:
case SUSHIPLATE2:
case SUSHIPLATE3:
case SUSHIPLATE4:
case SUSHIPLATE5:
case WAITTOBESEATED:
case VASE:
case STATUEFLASH:
case STATUE:
if(PN == BOTTLE10)
lotsofmoney(&sprite[i],4+(TRAND&3));
else if(PN == STATUE || PN == STATUEFLASH)
{
lotsofcolourglass(i,-1,40);
spritesound(GLASS_HEAVYBREAK,i);
}
else if(PN == VASE)
lotsofglass(i,-1,40);
spritesound(GLASS_BREAKING,i);
SA = TRAND&2047;
lotsofglass(i,-1,8);
deletesprite(i);
break;
case FETUS:
PN = FETUSBROKE;
spritesound(GLASS_BREAKING,i);
lotsofglass(i,-1,10);
break;
case FETUSBROKE:
for(j=0;j<48;j++)
{
shoot(i,BLOODSPLAT1);
SA += 333;
}
spritesound(GLASS_HEAVYBREAK,i);
spritesound(SQUISHED,i);
case BOTTLE7:
spritesound(GLASS_BREAKING,i);
lotsofglass(i,-1,10);
deletesprite(i);
break;
case HYDROPLANT:
PN = BROKEHYDROPLANT;
spritesound(GLASS_BREAKING,i);
lotsofglass(i,-1,10);
break;
case FORCESPHERE:
sprite[i].xrepeat = 0;
hittype[OW].temp_data[0] = 32;
hittype[OW].temp_data[1] = !hittype[OW].temp_data[1];
hittype[OW].temp_data[2] ++;
spawn(i,EXPLOSION2);
break;
case BROKEHYDROPLANT:
if(CS&1)
{
spritesound(GLASS_BREAKING,i);
SZ += 16<<8;
CS = 0;
lotsofglass(i,-1,5);
}
break;
case TOILET:
PN = TOILETBROKE;
CS |= (TRAND&1)<<2;
CS &= ~257;
spawn(i,TOILETWATER);
spritesound(GLASS_BREAKING,i);
break;
case STALL:
PN = STALLBROKE;
CS |= (TRAND&1)<<2;
CS &= ~257;
spawn(i,TOILETWATER);
spritesound(GLASS_HEAVYBREAK,i);
break;
case HYDRENT:
PN = BROKEFIREHYDRENT;
spawn(i,TOILETWATER);
// for(k=0;k<5;k++)
// {
// j = EGS(SECT,SX,SY,SZ-(TRAND%(48<<8)),SCRAP3+(TRAND&3),-8,48,48,TRAND&2047,(TRAND&63)+64,-(TRAND&4095)-(sprite[i].zvel>>2),i,5);
// sprite[j].pal = 2;
// }
spritesound(GLASS_HEAVYBREAK,i);
break;
case GRATE1:
PN = BGRATE1;
CS &= (65535-256-1);
spritesound(VENT_BUST,i);
break;
case CIRCLEPANNEL:
PN = CIRCLEPANNELBROKE;
CS &= (65535-256-1);
spritesound(VENT_BUST,i);
break;
case PANNEL1:
case PANNEL2:
PN = BPANNEL1;
CS &= (65535-256-1);
spritesound(VENT_BUST,i);
break;
case PANNEL3:
PN = BPANNEL3;
CS &= (65535-256-1);
spritesound(VENT_BUST,i);
break;
case PIPE1:
case PIPE2:
case PIPE3:
case PIPE4:
case PIPE5:
case PIPE6:
switch(PN)
{
case PIPE1:PN=PIPE1B;break;
case PIPE2:PN=PIPE2B;break;
case PIPE3:PN=PIPE3B;break;
case PIPE4:PN=PIPE4B;break;
case PIPE5:PN=PIPE5B;break;
case PIPE6:PN=PIPE6B;break;
}
j = spawn(i,STEAM);
sprite[j].z = sector[SECT].floorz-(32<<8);
break;
case MONK:
case LUKE:
case INDY:
case JURYGUY:
spritesound(SLT,i);
spawn(i,SHT);
case SPACEMARINE:
sprite[i].extra -= sprite[sn].extra;
if(sprite[i].extra > 0) break;
SA = TRAND&2047;
shoot(i,BLOODSPLAT1);
SA = TRAND&2047;
shoot(i,BLOODSPLAT2);
SA = TRAND&2047;
shoot(i,BLOODSPLAT3);
SA = TRAND&2047;
shoot(i,BLOODSPLAT4);
SA = TRAND&2047;
shoot(i,BLOODSPLAT1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -