gameexec.c: factor out stuff, make code more readable overall.

git-svn-id: https://svn.eduke32.com/eduke32@2745 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
helixhorned 2012-06-07 17:38:01 +00:00
parent 2ddd6df14a
commit 0ac242293b

View file

@ -431,7 +431,7 @@ int32_t G_GetAngleDelta(int32_t a,int32_t na)
GAMEEXEC_STATIC void VM_AlterAng(int32_t a) GAMEEXEC_STATIC void VM_AlterAng(int32_t a)
{ {
int32_t ticselapsed = (vm.g_t[0])&31; const int32_t ticselapsed = (vm.g_t[0])&31;
#ifndef LUNATIC #ifndef LUNATIC
const intptr_t *moveptr; const intptr_t *moveptr;
@ -507,14 +507,35 @@ GAMEEXEC_STATIC void VM_AlterAng(int32_t a)
} }
} }
static void do_face_player_addang(int32_t shr, int32_t goalang)
{
int32_t angdif = G_GetAngleDelta(vm.g_sp->ang,goalang)>>shr;
if ((angdif > -8 && angdif < 0) || (angdif < 8 && angdif > 0))
angdif *= 2;
vm.g_sp->ang += angdif;
}
static void do_face_player(int32_t shr)
{
int32_t goalang;
const DukePlayer_t *const ps = g_player[vm.g_p].ps;
if (g_player[vm.g_p].ps->newowner >= 0)
goalang = getangle(ps->opos.x-vm.g_sp->x, ps->opos.y-vm.g_sp->y);
else
goalang = getangle(ps->pos.x-vm.g_sp->x, ps->pos.y-vm.g_sp->y);
do_face_player_addang(shr, goalang);
}
GAMEEXEC_STATIC void VM_Move(void) GAMEEXEC_STATIC void VM_Move(void)
{ {
int32_t l;
#ifndef LUNATIC #ifndef LUNATIC
const intptr_t *moveptr; const intptr_t *moveptr;
#endif #endif
int32_t a = vm.g_sp->hitag, goalang, angdif; int32_t a = vm.g_sp->hitag, goalang, angdif;
int32_t daxvel;
int32_t deadflag = (A_CheckEnemySprite(vm.g_sp) && vm.g_sp->extra <= 0); int32_t deadflag = (A_CheckEnemySprite(vm.g_sp) && vm.g_sp->extra <= 0);
if (a == -1) a = 0; if (a == -1) a = 0;
@ -535,31 +556,15 @@ GAMEEXEC_STATIC void VM_Move(void)
if (deadflag) goto dead; if (deadflag) goto dead;
if (a&face_player) if (a&face_player)
{ do_face_player(2);
if (g_player[vm.g_p].ps->newowner >= 0)
goalang = getangle(g_player[vm.g_p].ps->opos.x-vm.g_sp->x,g_player[vm.g_p].ps->opos.y-vm.g_sp->y);
else goalang = getangle(g_player[vm.g_p].ps->pos.x-vm.g_sp->x,g_player[vm.g_p].ps->pos.y-vm.g_sp->y);
angdif = G_GetAngleDelta(vm.g_sp->ang,goalang)>>2;
if ((angdif > -8 && angdif < 0) || (angdif < 8 && angdif > 0))
angdif *= 2;
vm.g_sp->ang += angdif;
}
if (a&spin) if (a&spin)
vm.g_sp->ang += sintable[((vm.g_t[0]<<3)&2047)]>>6; vm.g_sp->ang += sintable[((vm.g_t[0]<<3)&2047)]>>6;
if (a&face_player_slow) if (a&face_player_slow)
{ do_face_player(4);
if (g_player[vm.g_p].ps->newowner >= 0)
goalang = getangle(g_player[vm.g_p].ps->opos.x-vm.g_sp->x,g_player[vm.g_p].ps->opos.y-vm.g_sp->y);
else goalang = getangle(g_player[vm.g_p].ps->pos.x-vm.g_sp->x,g_player[vm.g_p].ps->pos.y-vm.g_sp->y);
angdif = G_GetAngleDelta(vm.g_sp->ang,goalang)>>4;
if ((angdif > -8 && angdif < 0) || (angdif < 8 && angdif > 0))
angdif *= 2;
vm.g_sp->ang += angdif;
}
if (((a&jumptoplayer) == jumptoplayer)) if ((a&jumptoplayer) == jumptoplayer)
{ {
if (vm.g_t[0] < 16) if (vm.g_t[0] < 16)
vm.g_sp->zvel -= (sintable[(512+(vm.g_t[0]<<4))&2047]>>5); vm.g_sp->zvel -= (sintable[(512+(vm.g_t[0]<<4))&2047]>>5);
@ -571,10 +576,8 @@ GAMEEXEC_STATIC void VM_Move(void)
int32_t newy = g_player[vm.g_p].ps->pos.y+(g_player[vm.g_p].ps->vel.y/768); int32_t newy = g_player[vm.g_p].ps->pos.y+(g_player[vm.g_p].ps->vel.y/768);
goalang = getangle(newx-vm.g_sp->x,newy-vm.g_sp->y); goalang = getangle(newx-vm.g_sp->x,newy-vm.g_sp->y);
angdif = G_GetAngleDelta(vm.g_sp->ang,goalang)>>2;
if ((angdif > -8 && angdif < 0) || (angdif < 8 && angdif > 0)) do_face_player_addang(2, goalang);
angdif *= 2;
vm.g_sp->ang += angdif;
} }
dead: dead:
@ -607,21 +610,25 @@ dead:
if (vm.g_sp->xvel || vm.g_sp->zvel) if (vm.g_sp->xvel || vm.g_sp->zvel)
{ {
int32_t daxvel;
if (a && vm.g_sp->picnum != ROTATEGUN) if (a && vm.g_sp->picnum != ROTATEGUN)
{ {
if ((vm.g_sp->picnum == DRONE || vm.g_sp->picnum == COMMANDER) && vm.g_sp->extra > 0) if ((vm.g_sp->picnum == DRONE || vm.g_sp->picnum == COMMANDER) && vm.g_sp->extra > 0)
{ {
if (vm.g_sp->picnum == COMMANDER) if (vm.g_sp->picnum == COMMANDER)
{ {
int32_t l;
actor[vm.g_i].floorz = l = getflorzofslope(vm.g_sp->sectnum,vm.g_sp->x,vm.g_sp->y); actor[vm.g_i].floorz = l = getflorzofslope(vm.g_sp->sectnum,vm.g_sp->x,vm.g_sp->y);
if (vm.g_sp->z > (l-(8<<8))) if (vm.g_sp->z > l-(8<<8))
{ {
if (vm.g_sp->z > (l-(8<<8))) vm.g_sp->z = l-(8<<8); vm.g_sp->z = l-(8<<8);
vm.g_sp->zvel = 0; vm.g_sp->zvel = 0;
} }
actor[vm.g_i].ceilingz = l = getceilzofslope(vm.g_sp->sectnum,vm.g_sp->x,vm.g_sp->y); actor[vm.g_i].ceilingz = l = getceilzofslope(vm.g_sp->sectnum,vm.g_sp->x,vm.g_sp->y);
if ((vm.g_sp->z-l) < (80<<8)) if (vm.g_sp->z-l < (80<<8))
{ {
vm.g_sp->z = l+(80<<8); vm.g_sp->z = l+(80<<8);
vm.g_sp->zvel = 0; vm.g_sp->zvel = 0;
@ -629,10 +636,12 @@ dead:
} }
else else
{ {
int32_t l;
if (vm.g_sp->zvel > 0) if (vm.g_sp->zvel > 0)
{ {
actor[vm.g_i].floorz = l = getflorzofslope(vm.g_sp->sectnum,vm.g_sp->x,vm.g_sp->y); actor[vm.g_i].floorz = l = getflorzofslope(vm.g_sp->sectnum,vm.g_sp->x,vm.g_sp->y);
if (vm.g_sp->z > (l-(30<<8))) if (vm.g_sp->z > l-(30<<8))
vm.g_sp->z = l-(30<<8); vm.g_sp->z = l-(30<<8);
} }
else else
@ -652,7 +661,8 @@ dead:
vm.g_sp->z = actor[vm.g_i].floorz; vm.g_sp->z = actor[vm.g_i].floorz;
if (vm.g_sp->zvel < 0) if (vm.g_sp->zvel < 0)
{ {
l = getceilzofslope(vm.g_sp->sectnum,vm.g_sp->x,vm.g_sp->y); const int32_t l = getceilzofslope(vm.g_sp->sectnum,vm.g_sp->x,vm.g_sp->y);
if ((vm.g_sp->z-l) < (66<<8)) if ((vm.g_sp->z-l) < (66<<8))
{ {
vm.g_sp->z = l+(66<<8); vm.g_sp->z = l+(66<<8);
@ -672,19 +682,20 @@ dead:
{ {
if (vm.g_x < 960 && vm.g_sp->xrepeat > 16) if (vm.g_x < 960 && vm.g_sp->xrepeat > 16)
{ {
DukePlayer_t *const ps = g_player[vm.g_p].ps;
daxvel = -(1024-vm.g_x); daxvel = -(1024-vm.g_x);
angdif = getangle(g_player[vm.g_p].ps->pos.x-vm.g_sp->x,g_player[vm.g_p].ps->pos.y-vm.g_sp->y); angdif = getangle(ps->pos.x-vm.g_sp->x, ps->pos.y-vm.g_sp->y);
if (vm.g_x < 512) if (vm.g_x < 512)
{ {
g_player[vm.g_p].ps->vel.x = 0; ps->vel.x = 0;
g_player[vm.g_p].ps->vel.y = 0; ps->vel.y = 0;
} }
else else
{ {
g_player[vm.g_p].ps->vel.x = mulscale16(g_player[vm.g_p].ps->vel.x,g_player[vm.g_p].ps->runspeed-0x2000); ps->vel.x = mulscale16(ps->vel.x, ps->runspeed-0x2000);
g_player[vm.g_p].ps->vel.y = mulscale16(g_player[vm.g_p].ps->vel.y,g_player[vm.g_p].ps->runspeed-0x2000); ps->vel.y = mulscale16(ps->vel.y, ps->runspeed-0x2000);
} }
} }
else if (vm.g_sp->picnum != DRONE && vm.g_sp->picnum != SHARK && vm.g_sp->picnum != COMMANDER) else if (vm.g_sp->picnum != DRONE && vm.g_sp->picnum != SHARK && vm.g_sp->picnum != COMMANDER)
@ -712,7 +723,8 @@ dead:
} }
} }
if (!a) return; if (!a)
return;
if (sector[vm.g_sp->sectnum].ceilingstat&1) if (sector[vm.g_sp->sectnum].ceilingstat&1)
vm.g_sp->shade += (sector[vm.g_sp->sectnum].ceilingshade-vm.g_sp->shade)>>1; vm.g_sp->shade += (sector[vm.g_sp->sectnum].ceilingshade-vm.g_sp->shade)>>1;
@ -5042,7 +5054,9 @@ void A_Execute(int32_t iActor,int32_t iPlayer,int32_t lDist)
* (whether it is int32_t vs intptr_t), Although it is specifically cast to intptr_t* * (whether it is int32_t vs intptr_t), Although it is specifically cast to intptr_t*
* which might be corrected if the code is converted to use offsets */ * which might be corrected if the code is converted to use offsets */
/* Helixhorned: let's do away with intptr_t's... */ /* Helixhorned: let's do away with intptr_t's... */
#ifndef LUNATIC
if ((unsigned)vm.g_t[4] + 4 < (unsigned)g_scriptSize) if ((unsigned)vm.g_t[4] + 4 < (unsigned)g_scriptSize)
#endif
{ {
#ifndef LUNATIC #ifndef LUNATIC
const int32_t action_frames = *(script + vm.g_t[4] + 1); const int32_t action_frames = *(script + vm.g_t[4] + 1);