diff --git a/polymer/eduke32/source/actors.c b/polymer/eduke32/source/actors.c index 484d6f38c..d39355770 100644 --- a/polymer/eduke32/source/actors.c +++ b/polymer/eduke32/source/actors.c @@ -109,13 +109,32 @@ inline int32_t G_CheckForSpaceFloor(int32_t sectnum) return ((sector[sectnum].floorstat&1) && sector[sectnum].ceilingpal == 0 && ((sector[sectnum].floorpicnum==MOONSKY1)||(sector[sectnum].floorpicnum==BIGORBIT1))?1:0); } +void G_ClearCameraView(DukePlayer_t *ps) +{ + int32_t k; + + ps->newowner = -1; + + ps->pos.x = ps->opos.x; + ps->pos.y = ps->opos.y; + ps->pos.z = ps->opos.z; + ps->ang = ps->oang; + + updatesector(ps->pos.x, ps->pos.y, &ps->cursectnum); + P_UpdateScreenPal(ps); + + for (k=headspritestat[STAT_ACTOR]; k>=0; k=nextspritestat[k]) + if (sprite[k].picnum==CAMERA1) + sprite[k].yvel = 0; +} + void A_RadiusDamage(int32_t i, int32_t r, int32_t hp1, int32_t hp2, int32_t hp3, int32_t hp4) { spritetype *s=&sprite[i],*sj; walltype *wal; int32_t d, q, x1, y1; int32_t sectcnt, sectend, dasect, startwall, endwall, nextsect; - int32_t j,k,p,x,nextj; + int32_t j,k,x,nextj; int16_t sect=-1; char statlist[] = {STAT_DEFAULT,STAT_ACTOR,STAT_STANDABLE, STAT_PLAYER,STAT_FALLER,STAT_ZOMBIEACTOR,STAT_MISC @@ -272,26 +291,12 @@ SKIPWALLCHECK: { if (sj->picnum == APLAYER) { - p = sj->yvel; - if (g_player[p].ps->newowner >= 0) - { - g_player[p].ps->newowner = -1; - g_player[p].ps->pos.x = g_player[p].ps->opos.x; - g_player[p].ps->pos.y = g_player[p].ps->opos.y; - g_player[p].ps->pos.z = g_player[p].ps->opos.z; - g_player[p].ps->ang = g_player[p].ps->oang; - updatesector(g_player[p].ps->pos.x,g_player[p].ps->pos.y,&g_player[p].ps->cursectnum); - P_UpdateScreenPal(g_player[p].ps); + DukePlayer_t *ps = g_player[sj->yvel].ps; - k = headspritestat[STAT_ACTOR]; - while (k >= 0) - { - if (sprite[k].picnum==CAMERA1) - sprite[k].yvel = 0; - k = nextspritestat[k]; - } - } + if (ps->newowner >= 0) + G_ClearCameraView(ps); } + actor[j].owner = s->owner; } } @@ -4093,23 +4098,7 @@ ACTOR_STATIC void G_MoveActors(void) t[2] += 128; if (g_player[p].ps->newowner >= 0) - { - g_player[p].ps->newowner = -1; - g_player[p].ps->pos.x = g_player[p].ps->opos.x; - g_player[p].ps->pos.y = g_player[p].ps->opos.y; - g_player[p].ps->pos.z = g_player[p].ps->opos.z; - g_player[p].ps->ang = g_player[p].ps->oang; - - updatesector(g_player[p].ps->pos.x,g_player[p].ps->pos.y,&g_player[p].ps->cursectnum); - P_UpdateScreenPal(g_player[p].ps); - - j = headspritestat[STAT_ACTOR]; - while (j >= 0) - { - if (sprite[j].picnum==CAMERA1) sprite[j].yvel = 0; - j = nextspritestat[j]; - } - } + G_ClearCameraView(g_player[p].ps); if (t[3]>0) { diff --git a/polymer/eduke32/source/actors.h b/polymer/eduke32/source/actors.h index 0f3a23de6..cef868c31 100644 --- a/polymer/eduke32/source/actors.h +++ b/polymer/eduke32/source/actors.h @@ -258,6 +258,7 @@ void A_SpawnMultiple(int32_t sp,int32_t pic,int32_t n); void G_AddGameLight(int32_t radius,int32_t srcsprite,int32_t zoffset,int32_t range,int32_t color,int32_t priority); int32_t G_CheckForSpaceCeiling(int32_t sectnum); int32_t G_CheckForSpaceFloor(int32_t sectnum); +void G_ClearCameraView(DukePlayer_t *ps); void G_DoInterpolations(int32_t smoothratio); void G_MoveWorld(void); extern inline void G_RestoreInterpolations(void); diff --git a/polymer/eduke32/source/gameexec.c b/polymer/eduke32/source/gameexec.c index 22f813656..a3d91ee33 100644 --- a/polymer/eduke32/source/gameexec.c +++ b/polymer/eduke32/source/gameexec.c @@ -1419,23 +1419,7 @@ skip_check: int32_t j; if (g_player[vm.g_p].ps->newowner >= 0) - { - g_player[vm.g_p].ps->newowner = -1; - g_player[vm.g_p].ps->pos.x = g_player[vm.g_p].ps->opos.x; - g_player[vm.g_p].ps->pos.y = g_player[vm.g_p].ps->opos.y; - g_player[vm.g_p].ps->pos.z = g_player[vm.g_p].ps->opos.z; - g_player[vm.g_p].ps->ang = g_player[vm.g_p].ps->oang; - updatesector(g_player[vm.g_p].ps->pos.x,g_player[vm.g_p].ps->pos.y,&g_player[vm.g_p].ps->cursectnum); - P_UpdateScreenPal(g_player[vm.g_p].ps); - - j = headspritestat[STAT_ACTOR]; - while (j >= 0) - { - if (sprite[j].picnum==CAMERA1) - sprite[j].yvel = 0; - j = nextspritestat[j]; - } - } + G_ClearCameraView(g_player[vm.g_p].ps); j = sprite[g_player[vm.g_p].ps->i].extra; diff --git a/polymer/eduke32/source/sector.c b/polymer/eduke32/source/sector.c index 1110cfdaf..66f288c68 100644 --- a/polymer/eduke32/source/sector.c +++ b/polymer/eduke32/source/sector.c @@ -1972,7 +1972,7 @@ int32_t Sect_DamageCeiling(int32_t sn) void A_DamageObject(int32_t i,int32_t sn) { int16_t j; - int32_t k, p, rpg=0; + int32_t k, rpg=0; spritetype *s; // int32_t switchpicnum = PN; @@ -2411,25 +2411,10 @@ void A_DamageObject(int32_t i,int32_t sn) if (sprite[i].statnum == STAT_PLAYER) { - p = sprite[i].yvel; - if (g_player[p].ps->newowner >= 0) - { - g_player[p].ps->newowner = -1; - g_player[p].ps->pos.x = g_player[p].ps->opos.x; - g_player[p].ps->pos.y = g_player[p].ps->opos.y; - g_player[p].ps->pos.z = g_player[p].ps->opos.z; - g_player[p].ps->ang = g_player[p].ps->oang; + DukePlayer_t *ps = g_player[sprite[i].yvel].ps; - updatesector(g_player[p].ps->pos.x,g_player[p].ps->pos.y,&g_player[p].ps->cursectnum); - P_UpdateScreenPal(g_player[p].ps); - - j = headspritestat[STAT_ACTOR]; - while (j >= 0) - { - if (sprite[j].picnum==CAMERA1) sprite[j].yvel = 0; - j = nextspritestat[j]; - } - } + if (ps->newowner >= 0) + G_ClearCameraView(ps); if (sprite[i].xrepeat < 24 && sprite[sn].picnum == SHRINKSPARK) return; @@ -3302,22 +3287,7 @@ void P_CheckSectors(int32_t snum) CLEARCAMERAS: if (i < 0) - { - Bmemcpy(p, &p->opos.x, sizeof(vec3_t)); - p->ang = p->oang; - p->newowner = -1; - - updatesector(p->pos.x,p->pos.y,&p->cursectnum); - P_UpdateScreenPal(p); - - - i = headspritestat[STAT_ACTOR]; - while (i >= 0) - { - if (PN==CAMERA1) SP = 0; - i = nextspritestat[i]; - } - } + G_ClearCameraView(p); else if (p->newowner >= 0) p->newowner = -1;