📄 gamedef.c
字号:
if(g_sp->picnum == COMMANDER)
{
hittype[g_i].floorz = l = getflorzofslope(g_sp->sectnum,g_sp->x,g_sp->y);
if( g_sp->z > (l-(8<<8)) )
{
if( g_sp->z > (l-(8<<8)) ) g_sp->z = l-(8<<8);
g_sp->zvel = 0;
}
hittype[g_i].ceilingz = l = getceilzofslope(g_sp->sectnum,g_sp->x,g_sp->y);
if( (g_sp->z-l) < (80<<8) )
{
g_sp->z = l+(80<<8);
g_sp->zvel = 0;
}
}
else
{
if( g_sp->zvel > 0 )
{
hittype[g_i].floorz = l = getflorzofslope(g_sp->sectnum,g_sp->x,g_sp->y);
if( g_sp->z > (l-(30<<8)) )
g_sp->z = l-(30<<8);
}
else
{
hittype[g_i].ceilingz = l = getceilzofslope(g_sp->sectnum,g_sp->x,g_sp->y);
if( (g_sp->z-l) < (50<<8) )
{
g_sp->z = l+(50<<8);
g_sp->zvel = 0;
}
}
}
}
else if(g_sp->picnum != ORGANTIC)
{
if(g_sp->zvel > 0 && hittype[g_i].floorz < g_sp->z)
g_sp->z = hittype[g_i].floorz;
if( g_sp->zvel < 0)
{
l = getceilzofslope(g_sp->sectnum,g_sp->x,g_sp->y);
if( (g_sp->z-l) < (66<<8) )
{
g_sp->z = l+(66<<8);
g_sp->zvel >>= 1;
}
}
}
}
else if(g_sp->picnum == APLAYER)
if( (g_sp->z-hittype[g_i].ceilingz) < (32<<8) )
g_sp->z = hittype[g_i].ceilingz+(32<<8);
daxvel = g_sp->xvel;
angdif = g_sp->ang;
if( a && g_sp->picnum != ROTATEGUN )
{
if( g_x < 960 && g_sp->xrepeat > 16 )
{
daxvel = -(1024-g_x);
angdif = getangle(ps[g_p].posx-g_sp->x,ps[g_p].posy-g_sp->y);
if(g_x < 512)
{
ps[g_p].posxv = 0;
ps[g_p].posyv = 0;
}
else
{
ps[g_p].posxv = mulscale(ps[g_p].posxv,dukefriction-0x2000,16);
ps[g_p].posyv = mulscale(ps[g_p].posyv,dukefriction-0x2000,16);
}
}
else if(g_sp->picnum != DRONE && g_sp->picnum != SHARK && g_sp->picnum != COMMANDER)
{
if( hittype[g_i].bposz != g_sp->z || ( ud.multimode < 2 && ud.player_skill < 2 ) )
{
if( (g_t[0]&1) || ps[g_p].actorsqu == g_i ) return;
else daxvel <<= 1;
}
else
{
if( (g_t[0]&3) || ps[g_p].actorsqu == g_i ) return;
else daxvel <<= 2;
}
}
}
hittype[g_i].movflag = movesprite(g_i,
(daxvel*(sintable[(angdif+512)&2047]))>>14,
(daxvel*(sintable[angdif&2047]))>>14,g_sp->zvel,CLIPMASK0);
}
if( a )
{
if (sector[g_sp->sectnum].ceilingstat&1)
g_sp->shade += (sector[g_sp->sectnum].ceilingshade-g_sp->shade)>>1;
else g_sp->shade += (sector[g_sp->sectnum].floorshade-g_sp->shade)>>1;
if( sector[g_sp->sectnum].floorpicnum == MIRROR )
deletesprite(g_i);
}
}
char parse(void);
void parseifelse(long condition)
{
if( condition )
{
insptr+=2;
parse();
}
else
{
insptr = (long *) *(insptr+1);
if(*insptr == 10)
{
insptr+=2;
parse();
}
}
}
// long *it = 0x00589a04;
char parse(void)
{
long j, l, s;
if(killit_flag) return 1;
// if(*it == 1668249134L) gameexit("\nERR");
switch(*insptr)
{
case 3:
insptr++;
parseifelse( rnd(*insptr));
break;
case 45:
if(g_x > 1024)
{
short temphit, sclip, angdif;
if( badguy(g_sp) && g_sp->xrepeat > 56 )
{
sclip = 3084;
angdif = 48;
}
else
{
sclip = 768;
angdif = 16;
}
j = hitasprite(g_i,&temphit);
if(j == (1<<30))
{
parseifelse(1);
break;
}
if(j > sclip)
{
if(temphit >= 0 && sprite[temphit].picnum == g_sp->picnum)
j = 0;
else
{
g_sp->ang += angdif;j = hitasprite(g_i,&temphit);g_sp->ang -= angdif;
if(j > sclip)
{
if(temphit >= 0 && sprite[temphit].picnum == g_sp->picnum)
j = 0;
else
{
g_sp->ang -= angdif;j = hitasprite(g_i,&temphit);g_sp->ang += angdif;
if( j > 768 )
{
if(temphit >= 0 && sprite[temphit].picnum == g_sp->picnum)
j = 0;
else j = 1;
}
else j = 0;
}
}
else j = 0;
}
}
else j = 0;
}
else j = 1;
parseifelse(j);
break;
case 91:
j = cansee(g_sp->x,g_sp->y,g_sp->z-((TRAND&41)<<8),g_sp->sectnum,ps[g_p].posx,ps[g_p].posy,ps[g_p].posz/*-((TRAND&41)<<8)*/,sprite[ps[g_p].i].sectnum);
parseifelse(j);
if( j ) hittype[g_i].timetosleep = SLEEPTIME;
break;
case 49:
parseifelse(hittype[g_i].actorstayput == -1);
break;
case 5:
{
spritetype *s;
short sect;
if(ps[g_p].holoduke_on >= 0)
{
s = &sprite[ps[g_p].holoduke_on];
j = cansee(g_sp->x,g_sp->y,g_sp->z-(TRAND&((32<<8)-1)),g_sp->sectnum,
s->x,s->y,s->z,s->sectnum);
if(j == 0)
s = &sprite[ps[g_p].i];
}
else s = &sprite[ps[g_p].i];
j = cansee(g_sp->x,g_sp->y,g_sp->z-(TRAND&((47<<8))),g_sp->sectnum,
s->x,s->y,s->z-(24<<8),s->sectnum);
if(j == 0)
{
if( ( klabs(hittype[g_i].lastvx-g_sp->x)+klabs(hittype[g_i].lastvy-g_sp->y) ) <
( klabs(hittype[g_i].lastvx-s->x)+klabs(hittype[g_i].lastvy-s->y) ) )
j = 0;
if( j == 0 )
{
j = furthestcanseepoint(g_i,s,&hittype[g_i].lastvx,&hittype[g_i].lastvy);
if(j == -1) j = 0;
else j = 1;
}
}
else
{
hittype[g_i].lastvx = s->x;
hittype[g_i].lastvy = s->y;
}
if( j == 1 && ( g_sp->statnum == 1 || g_sp->statnum == 6 ) )
hittype[g_i].timetosleep = SLEEPTIME;
parseifelse(j == 1);
break;
}
case 6:
parseifelse(ifhitbyweapon(g_i) >= 0);
break;
case 27:
parseifelse( ifsquished(g_i, g_p) == 1);
break;
case 26:
{
j = g_sp->extra;
if(g_sp->picnum == APLAYER)
j--;
parseifelse(j < 0);
}
break;
case 24:
insptr++;
g_t[5] = *insptr;
g_t[4] = *(long *)(g_t[5]); // Action
g_t[1] = *(long *)(g_t[5]+4); // move
g_sp->hitag = *(long *)(g_t[5]+8); // Ai
g_t[0] = g_t[2] = g_t[3] = 0;
if(g_sp->hitag&random_angle)
g_sp->ang = TRAND&2047;
insptr++;
break;
case 7:
insptr++;
g_t[2] = 0;
g_t[3] = 0;
g_t[4] = *insptr;
insptr++;
break;
case 8:
insptr++;
parseifelse(g_x < *insptr);
if(g_x > MAXSLEEPDIST && hittype[g_i].timetosleep == 0)
hittype[g_i].timetosleep = SLEEPTIME;
break;
case 9:
insptr++;
parseifelse(g_x > *insptr);
if(g_x > MAXSLEEPDIST && hittype[g_i].timetosleep == 0)
hittype[g_i].timetosleep = SLEEPTIME;
break;
case 10:
insptr = (long *) *(insptr+1);
break;
case 100:
insptr++;
g_sp->extra += *insptr;
insptr++;
break;
case 11:
insptr++;
g_sp->extra = *insptr;
insptr++;
break;
case 94:
insptr++;
if(ud.coop >= 1 && ud.multimode > 1)
{
if(*insptr == 0)
{
for(j=0;j < ps[g_p].weapreccnt;j++)
if( ps[g_p].weaprecs[j] == g_sp->picnum )
break;
parseifelse(j < ps[g_p].weapreccnt && g_sp->owner == g_i);
}
else if(ps[g_p].weapreccnt < 16)
{
ps[g_p].weaprecs[ps[g_p].weapreccnt++] = g_sp->picnum;
parseifelse(g_sp->owner == g_i);
}
}
else parseifelse(0);
break;
case 95:
insptr++;
if(g_sp->picnum == APLAYER)
g_sp->pal = ps[g_sp->yvel].palookup;
else g_sp->pal = hittype[g_i].tempang;
hittype[g_i].tempang = 0;
break;
case 104:
insptr++;
checkweapons(&ps[g_sp->yvel]);
break;
case 106:
insptr++;
break;
case 97:
insptr++;
if(Sound[g_sp->yvel].num == 0)
spritesound(g_sp->yvel,g_i);
break;
case 96:
insptr++;
if( ud.multimode > 1 && g_sp->picnum == APLAYER )
{
if(ps[otherp].quick_kick == 0)
ps[otherp].quick_kick = 14;
}
else if(g_sp->picnum != APLAYER && ps[g_p].quick_kick == 0)
ps[g_p].quick_kick = 14;
break;
case 28:
insptr++;
j = ((*insptr)-g_sp->xrepeat)<<1;
g_sp->xrepeat += ksgn(j);
insptr++;
if( ( g_sp->picnum == APLAYER && g_sp->yrepeat < 36 ) || *insptr < g_sp->yrepeat || ((g_sp->yrepeat*(tilesizy[g_sp->picnum]+8))<<2) < (hittype[g_i].floorz - hittype[g_i].ceilingz) )
{
j = ((*insptr)-g_sp->yrepeat)<<1;
if( klabs(j) ) g_sp->yrepeat += ksgn(j);
}
insptr++;
break;
case 99:
insptr++;
g_sp->xrepeat = (char) *insptr;
insptr++;
g_sp->yrepeat = (char) *insptr;
insptr++;
break;
case 13:
insptr++;
shoot(g_i,(short)*insptr);
insptr++;
break;
case 87:
insptr++;
if( Sound[*insptr].num == 0 )
spritesound((short) *insptr,g_i);
insptr++;
break;
case 89:
insptr++;
if( Sound[*insptr].num > 0 )
stopsound((short)*insptr);
insptr++;
break;
case 92:
insptr++;
if(g_p == screenpeek || ud.coop==1)
spritesound((short) *insptr,ps[screenpeek].i);
insptr++;
break;
case 15:
insptr++;
spritesound((short) *insptr,g_i);
insptr++;
break;
case 84:
insptr++;
ps[g_p].tipincs = 26;
break;
case 16:
insptr++;
g_sp->xoffset = 0;
g_sp->yoffset = 0;
// if(!gotz)
{
long c;
if( floorspace(g_sp->sectnum) )
c = 0;
else
{
if( ceilingspace(g_sp->sectnum) || sector[g_sp->sectnum].lotag == 2)
c = gc/6;
else c = gc;
}
if( hittype[g_i].cgg <= 0 || (sector[g_sp->sectnum].floorstat&2) )
{
getglobalz(g_i);
hittype[g_i].cgg = 6;
}
else hittype[g_i].cgg --;
if( g_sp->z < (hittype[g_i].floorz-FOURSLEIGHT) )
{
g_sp->zvel += c;
g_sp->z+=g_sp->zvel;
if(g_sp->zvel > 6144) g_sp->zvel = 6144;
}
else
{
g_sp->z = hittype[g_i].floorz - FOURSLEIGHT;
if( badguy(g_sp) || ( g_sp->picnum == APLAYER && g_sp->owner >= 0) )
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -