diff --git a/source/games/duke/src/actors.cpp b/source/games/duke/src/actors.cpp index 173d08dd2..2eadd1d34 100644 --- a/source/games/duke/src/actors.cpp +++ b/source/games/duke/src/actors.cpp @@ -202,7 +202,7 @@ void checkavailweapon(struct player_struct* player) void clearcamera(player_struct* ps) { - ps->newowner = -1; + ps->newOwner = nullptr; ps->posx = ps->oposx; ps->posy = ps->oposy; ps->posz = ps->oposz; @@ -417,7 +417,7 @@ void moveplayers(void) auto spri = &act->s; if (act->GetOwner()) { - if (p->newowner >= 0) //Looking thru the camera + if (p->newOwner != nullptr) //Looking thru the camera { spri->x = p->oposx; spri->y = p->oposy; @@ -482,7 +482,7 @@ void moveplayers(void) p->posy = spri->y; p->posz = spri->z - (20 << 8); - p->newowner = -1; + p->newOwner = nullptr; if (p->wackedbyactor != nullptr && p->wackedbyactor->s.statnum < MAXSTATUS) { @@ -4487,7 +4487,7 @@ void handle_se27(DDukeActor* actor) ud.cameraactor = actor; t[0]++; } - else if (ud.recstat == 2 && ps[p].newowner == -1) + else if (ud.recstat == 2 && ps[p].newOwner == nullptr) { if (cansee(s->x, s->y, s->z, s->sectnum, ps[p].posx, ps[p].posy, ps[p].posz, ps[p].cursectnum)) { diff --git a/source/games/duke/src/actors_d.cpp b/source/games/duke/src/actors_d.cpp index f208215af..7c54dfd8f 100644 --- a/source/games/duke/src/actors_d.cpp +++ b/source/games/duke/src/actors_d.cpp @@ -515,7 +515,7 @@ SKIPWALLCHECK: ps[p].numloogs = -1 - spri->yvel; } - if (ps[p].newowner >= 0) + if (ps[p].newOwner != nullptr) { clearcamera(&ps[p]); } @@ -2465,9 +2465,9 @@ static void greenslime(DDukeActor *actor) if (t[2] < 348) t[2] += 128; - if (ps[p].newowner >= 0) + if (ps[p].newOwner != nullptr) { - ps[p].newowner = -1; + ps[p].newOwner = nullptr; ps[p].posx = ps[p].oposx; ps[p].posy = ps[p].oposy; ps[p].posz = ps[p].oposz; @@ -3829,7 +3829,7 @@ void move_d(DDukeActor *actor, int playernum, int xvel) if (a & face_player) { - if (ps[playernum].newowner >= 0) + if (ps[playernum].newOwner != nullptr) goalang = getangle(ps[playernum].oposx - spr->x, ps[playernum].oposy - spr->y); else goalang = getangle(ps[playernum].posx - spr->x, ps[playernum].posy - spr->y); angdif = getincangle(spr->ang, goalang) >> 2; @@ -3842,7 +3842,7 @@ void move_d(DDukeActor *actor, int playernum, int xvel) if (a & face_player_slow) { - if (ps[playernum].newowner >= 0) + if (ps[playernum].newOwner != nullptr) goalang = getangle(ps[playernum].oposx - spr->x, ps[playernum].oposy - spr->y); else goalang = getangle(ps[playernum].posx - spr->x, ps[playernum].posy - spr->y); angdif = ksgn(getincangle(spr->ang, goalang)) << 5; diff --git a/source/games/duke/src/actors_r.cpp b/source/games/duke/src/actors_r.cpp index 20851f861..77b4c8044 100644 --- a/source/games/duke/src/actors_r.cpp +++ b/source/games/duke/src/actors_r.cpp @@ -360,7 +360,7 @@ SKIPWALLCHECK: if (spri2->picnum == APLAYER) { p = act2->PlayerIndex(); - if (ps[p].newowner >= 0) + if (ps[p].newOwner != nullptr) { clearcamera(&ps[p]); } @@ -3727,7 +3727,7 @@ void move_r(DDukeActor *actor, int pnum, int xvel) if (a & face_player) { - if (ps[pnum].newowner >= 0) + if (ps[pnum].newOwner != nullptr) goalang = getangle(ps[pnum].oposx - spr->x, ps[pnum].oposy - spr->y); else goalang = getangle(ps[pnum].posx - spr->x, ps[pnum].posy - spr->y); angdif = getincangle(spr->ang, goalang) >> 2; @@ -3740,7 +3740,7 @@ void move_r(DDukeActor *actor, int pnum, int xvel) if (a & face_player_slow) { - if (ps[pnum].newowner >= 0) + if (ps[pnum].newOwner != nullptr) goalang = getangle(ps[pnum].oposx - spr->x, ps[pnum].oposy - spr->y); else goalang = getangle(ps[pnum].posx - spr->x, ps[pnum].posy - spr->y); angdif = ksgn(getincangle(spr->ang, goalang)) << 5; @@ -3756,7 +3756,7 @@ void move_r(DDukeActor *actor, int pnum, int xvel) { if (a & antifaceplayerslow) { - if (ps[pnum].newowner >= 0) + if (ps[pnum].newOwner != nullptr) goalang = (getangle(ps[pnum].oposx - spr->x, ps[pnum].oposy - spr->y) + 1024) & 2047; else goalang = (getangle(ps[pnum].posx - spr->x, ps[pnum].posy - spr->y) + 1024) & 2047; angdif = ksgn(getincangle(spr->ang, goalang)) << 5; diff --git a/source/games/duke/src/animatesprites_d.cpp b/source/games/duke/src/animatesprites_d.cpp index dc1ae6419..e2678eca8 100644 --- a/source/games/duke/src/animatesprites_d.cpp +++ b/source/games/duke/src/animatesprites_d.cpp @@ -174,7 +174,7 @@ void animatesprites_d(int x, int y, int a, int smoothratio) } if (t->statnum == 99) continue; - if (s->statnum != STAT_ACTOR && s->picnum == APLAYER && ps[s->yvel].newowner == -1 && h->GetOwner()) + if (s->statnum != STAT_ACTOR && s->picnum == APLAYER && ps[s->yvel].newOwner == nullptr && h->GetOwner()) { t->x -= mulscale16(MaxSmoothRatio - smoothratio, ps[s->yvel].posx - ps[s->yvel].oposx); t->y -= mulscale16(MaxSmoothRatio - smoothratio, ps[s->yvel].posy - ps[s->yvel].oposy); @@ -324,7 +324,7 @@ void animatesprites_d(int x, int y, int a, int smoothratio) if (t->pal == 1) t->z -= (18 << 8); - if (ps[p].over_shoulder_on > 0 && ps[p].newowner < 0) + if (ps[p].over_shoulder_on > 0 && ps[p].newOwner == nullptr) { t->cstat |= 2; if (screenpeek == myconnectindex && numplayers >= 2) @@ -417,14 +417,14 @@ void animatesprites_d(int x, int y, int a, int smoothratio) else s->yoffset = 0; } - if (ps[p].newowner > -1) + if (ps[p].newOwner != nullptr) { t4 = ScriptCode[actorinfo[APLAYER].scriptaddress + 1]; t3 = 0; t1 = ScriptCode[actorinfo[APLAYER].scriptaddress + 2]; } - if (ud.cameraactor == nullptr && ps[p].newowner == -1) + if (ud.cameraactor == nullptr && ps[p].newOwner == nullptr) if (h->GetOwner() && display_mirror == 0 && ps[p].over_shoulder_on == 0) if (ud.multimode < 2 || (ud.multimode > 1 && p == screenpeek)) { diff --git a/source/games/duke/src/animatesprites_r.cpp b/source/games/duke/src/animatesprites_r.cpp index 09c572321..ab403510f 100644 --- a/source/games/duke/src/animatesprites_r.cpp +++ b/source/games/duke/src/animatesprites_r.cpp @@ -159,7 +159,7 @@ void animatesprites_r(int x, int y, int a, int smoothratio) } if (t->statnum == 99) continue; - if (s->statnum != STAT_ACTOR && s->picnum == APLAYER && ps[s->yvel].newowner == -1 && h->GetOwner()) + if (s->statnum != STAT_ACTOR && s->picnum == APLAYER && ps[s->yvel].newOwner == nullptr && h->GetOwner()) { t->x -= mulscale16(MaxSmoothRatio - smoothratio, ps[s->yvel].posx - ps[s->yvel].oposx); t->y -= mulscale16(MaxSmoothRatio - smoothratio, ps[s->yvel].posy - ps[s->yvel].oposy); @@ -371,7 +371,7 @@ void animatesprites_r(int x, int y, int a, int smoothratio) if (t->pal == 1) t->z -= (18 << 8); - if (ps[p].over_shoulder_on > 0 && ps[p].newowner < 0) + if (ps[p].over_shoulder_on > 0 && ps[p].newOwner == nullptr) { t->cstat |= 2; if (screenpeek == myconnectindex && numplayers >= 2) @@ -468,14 +468,14 @@ void animatesprites_r(int x, int y, int a, int smoothratio) else s->yoffset = 0; } - if (ps[p].newowner > -1) + if (ps[p].newOwner != nullptr) { t4 = ScriptCode[actorinfo[APLAYER].scriptaddress + 1]; t3 = 0; t1 = ScriptCode[actorinfo[APLAYER].scriptaddress + 2]; } - if (ud.cameraactor == nullptr && ps[p].newowner == -1) + if (ud.cameraactor == nullptr && ps[p].newOwner == nullptr) if (h->GetOwner() && display_mirror == 0 && ps[p].over_shoulder_on == 0) if (ud.multimode < 2 || (ud.multimode > 1 && p == screenpeek)) { diff --git a/source/games/duke/src/funct.h b/source/games/duke/src/funct.h index d679ac189..2b26c17d2 100644 --- a/source/games/duke/src/funct.h +++ b/source/games/duke/src/funct.h @@ -213,7 +213,7 @@ void OffMotorcycle(player_struct *pl); void OnBoat(player_struct *pl, DDukeActor* snum); void OffBoat(player_struct *pl); -void cameratext(int i); +void cameratext(DDukeActor* i); void dobonus(int bonusonly, const CompletionFunc& completion); void dobonus_d(int bonusonly, const CompletionFunc& completion); void dobonus_r(int bonusonly, const CompletionFunc& completion); diff --git a/source/games/duke/src/game_misc.cpp b/source/games/duke/src/game_misc.cpp index 48344b543..6c6800982 100644 --- a/source/games/duke/src/game_misc.cpp +++ b/source/games/duke/src/game_misc.cpp @@ -253,8 +253,8 @@ void drawoverlays(double smoothratio) { if (automapMode != am_full) { - if (!isRR() && pp->newowner >= 0) - cameratext(pp->newowner); + if (!isRR() && pp->newOwner != nullptr) + cameratext(pp->newOwner); else { fi.displayweapon(screenpeek, smoothratio); @@ -269,7 +269,7 @@ void drawoverlays(double smoothratio) { dointerpolations(smoothratio); - if (pp->newowner == -1 && playrunning()) + if (pp->newOwner == nullptr && playrunning()) { if (screenpeek == myconnectindex && numplayers > 1) { @@ -299,7 +299,7 @@ void drawoverlays(double smoothratio) StatusBar->UpdateStatusBar(); - if (ps[myconnectindex].newowner == -1 && ud.cameraactor == nullptr) + if (ps[myconnectindex].newOwner == nullptr && ud.cameraactor == nullptr) { DrawCrosshair(TILE_CROSSHAIR, ps[screenpeek].last_extra, -getHalfLookAng(pp->angle.olook_ang.asq16(), pp->angle.look_ang.asq16(), cl_syncinput, smoothratio), pp->over_shoulder_on ? 2.5 : 0, isRR() ? 0.5 : 1); } @@ -317,14 +317,14 @@ void drawoverlays(double smoothratio) // //--------------------------------------------------------------------------- -void cameratext(int i) +void cameratext(DDukeActor *cam) { auto drawitem = [=](int tile, double x, double y, bool flipx, bool flipy) { DrawTexture(twod, tileGetTexture(tile), x, y, DTA_ViewportX, windowxy1.x, DTA_ViewportY, windowxy1.y, DTA_ViewportWidth, windowxy2.x - windowxy1.x + 1, DTA_CenterOffsetRel, true, DTA_ViewportHeight, windowxy2.y - windowxy1.y + 1, DTA_FlipX, flipx, DTA_FlipY, flipy, DTA_FullscreenScale, FSMode_Fit320x200, TAG_DONE); }; - if (!hittype[i].temp_data[0]) + if (!cam->temp_data[0]) { drawitem(TILE_CAMCORNER, 24, 33, false, false); drawitem(TILE_CAMCORNER + 1, 320 - 26, 33, false, false); diff --git a/source/games/duke/src/gameexec.cpp b/source/games/duke/src/gameexec.cpp index 320e7b814..510f858d0 100644 --- a/source/games/duke/src/gameexec.cpp +++ b/source/games/duke/src/gameexec.cpp @@ -538,8 +538,8 @@ void DoPlayer(bool bSet, int lVar1, int lLabelID, int lVar2, DDukeActor* sActor, break; case PLAYER_NEWOWNER: - if (bSet) ps[iPlayer].newowner = lValue; - else SetGameVarID((int)lVar2, ps[iPlayer].newowner, sActor, sPlayer); + if (bSet) ps[iPlayer].newOwner = ScriptIndexToActor(lValue); + else SetGameVarID((int)lVar2, ActorToScriptIndex(ps[iPlayer].newOwner), sActor, sPlayer); break; case PLAYER_HURT_DELAY: @@ -2046,9 +2046,9 @@ int ParseState::parse(void) case concmd_addphealth: // todo: move out to player. insptr++; - if(!isRR() && ps[g_p].newowner >= 0) + if(!isRR() && ps[g_p].newOwner != nullptr) { - ps[g_p].newowner = -1; + ps[g_p].newOwner = nullptr; ps[g_p].posx = ps[g_p].oposx; ps[g_p].posy = ps[g_p].oposy; ps[g_p].posz = ps[g_p].oposz; diff --git a/source/games/duke/src/hudweapon_d.cpp b/source/games/duke/src/hudweapon_d.cpp index 0b8b887db..f3afb3d63 100644 --- a/source/games/duke/src/hudweapon_d.cpp +++ b/source/games/duke/src/hudweapon_d.cpp @@ -291,7 +291,7 @@ void displayweapon_d(int snum, double smoothratio) gs = p->GetActor()->s.shade; if(gs > 24) gs = 24; - bool playerVars = p->newowner >= 0 || ud.cameraactor != nullptr || p->over_shoulder_on > 0 || (p->GetActor()->s.pal != 1 && p->GetActor()->s.extra <= 0); + bool playerVars = p->newOwner != nullptr || ud.cameraactor != nullptr || p->over_shoulder_on > 0 || (p->GetActor()->s.pal != 1 && p->GetActor()->s.extra <= 0); bool playerAnims = animatefist(gs,snum,look_anghalf) || animateknuckles(gs,snum,hard_landing,look_anghalf,horiz16th) || animatetip(gs,snum,hard_landing,look_anghalf,horiz16th) || animateaccess(gs,snum,hard_landing,look_anghalf,horiz16th); diff --git a/source/games/duke/src/hudweapon_r.cpp b/source/games/duke/src/hudweapon_r.cpp index b617f0873..c202843a2 100644 --- a/source/games/duke/src/hudweapon_r.cpp +++ b/source/games/duke/src/hudweapon_r.cpp @@ -136,7 +136,7 @@ void displayweapon_r(int snum, double smoothratio) gs = p->GetActor()->s.shade; if(gs > 24) gs = 24; - if(p->newowner >= 0 || ud.cameraactor != nullptr || p->over_shoulder_on > 0 || (p->GetActor()->s.pal != 1 && p->GetActor()->s.extra <= 0)) + if(p->newOwner != nullptr || ud.cameraactor != nullptr || p->over_shoulder_on > 0 || (p->GetActor()->s.pal != 1 && p->GetActor()->s.extra <= 0)) return; int opos = p->oweapon_pos * p->oweapon_pos; diff --git a/source/games/duke/src/input.cpp b/source/games/duke/src/input.cpp index 4daf4c948..9fcd6a2f4 100644 --- a/source/games/duke/src/input.cpp +++ b/source/games/duke/src/input.cpp @@ -119,7 +119,7 @@ void hud_input(int plnum) if (p->GetActor()->s.extra <= 0) return; // Activate an inventory item. This just forwards to the other inventory bits. If the inventory selector was taken out of the playsim this could be removed. - if (PlayerInput(plnum, SB_INVUSE) && p->newowner == -1) + if (PlayerInput(plnum, SB_INVUSE) && p->newOwner == nullptr) { SetGameVarID(g_iReturnVarID, 0, nullptr, plnum); OnEvent(EVENT_INVENTORY, plnum, nullptr, -1); @@ -270,7 +270,7 @@ void hud_input(int plnum) } } - if (PlayerUseItem(plnum, ICON_HOLODUKE) && (isRR() || p->newowner == -1)) + if (PlayerUseItem(plnum, ICON_HOLODUKE) && (isRR() || p->newOwner == nullptr)) { SetGameVarID(g_iReturnVarID, 0, nullptr, plnum); OnEvent(EVENT_HOLODUKEON, plnum, nullptr, -1); @@ -327,7 +327,7 @@ void hud_input(int plnum) } } - if (isRR() && PlayerUseItem(plnum, ICON_HEATS) && p->newowner == -1) + if (isRR() && PlayerUseItem(plnum, ICON_HEATS) && p->newOwner == nullptr) { SetGameVarID(g_iReturnVarID, 0, nullptr, plnum); OnEvent(EVENT_USENIGHTVISION, plnum, nullptr, -1); @@ -412,7 +412,7 @@ void hud_input(int plnum) } } - if (PlayerUseItem(plnum, ICON_JETPACK) && (isRR() || p->newowner == -1)) + if (PlayerUseItem(plnum, ICON_JETPACK) && (isRR() || p->newOwner == nullptr)) { SetGameVarID(g_iReturnVarID, 0, nullptr, plnum); OnEvent(EVENT_USEJETPACK, plnum, nullptr, -1); @@ -821,7 +821,7 @@ static void FinalizeInput(int playerNum, InputPacket& input, bool vehicle) auto p = &ps[playerNum]; bool blocked = movementBlocked(playerNum) || p->GetActor()->s.extra <= 0 || (p->dead_flag && !ud.god); - if (blocked && ps[playerNum].newowner < 0) + if (blocked && ps[playerNum].newOwner == nullptr) { // neutralize all movement when blocked or in automap follow mode loc.fvel = loc.svel = 0; @@ -846,7 +846,7 @@ static void FinalizeInput(int playerNum, InputPacket& input, bool vehicle) loc.svel = input.svel = 0; } - if (p->on_crane == nullptr && p->newowner == -1) + if (p->on_crane == nullptr && p->newOwner == nullptr) { // input.avel already added to loc in processMovement() loc.avel = clamp(loc.avel, -MAXANGVEL, MAXANGVEL); @@ -860,7 +860,7 @@ static void FinalizeInput(int playerNum, InputPacket& input, bool vehicle) loc.avel = input.avel = 0; } - if (p->newowner == -1 && !(p->sync.actions & SB_CENTERVIEW)) + if (p->newOwner == nullptr && !(p->sync.actions & SB_CENTERVIEW)) { // input.horz already added to loc in processMovement() loc.horz = clamp(loc.horz, -MAXHORIZVEL, MAXHORIZVEL); diff --git a/source/games/duke/src/player.cpp b/source/games/duke/src/player.cpp index 17a08280c..a840e61e7 100644 --- a/source/games/duke/src/player.cpp +++ b/source/games/duke/src/player.cpp @@ -1032,7 +1032,7 @@ bool movementBlocked(int snum) p->hard_landing || p->access_incs > 0 || p->knee_incs > 0 || - p->newowner >= 0 || + p->newOwner != nullptr || (blockingweapon() && p->kickback_pic > 1 && p->kickback_pic < weapondelay())); } diff --git a/source/games/duke/src/player_d.cpp b/source/games/duke/src/player_d.cpp index 787990679..8cd788408 100644 --- a/source/games/duke/src/player_d.cpp +++ b/source/games/duke/src/player_d.cpp @@ -2710,7 +2710,7 @@ static void processweapon(int snum, ESyncBits actions, int psect) void processinput_d(int snum) { - int j, i, k, doubvel, fz, cz, truefdist; + int j, k, doubvel, fz, cz, truefdist; Collision chz, clz; bool shrunk; ESyncBits actions; @@ -2831,9 +2831,8 @@ void processinput_d(int snum) if (p->transporter_hold < 0) p->transporter_hold++; - if (p->newowner >= 0) + if (p->newOwner != nullptr) { - i = p->newowner; p->posxv = p->posyv = s->xvel = 0; fi.doincrements(p); @@ -2846,6 +2845,7 @@ void processinput_d(int snum) doubvel = TICSPERFRAME; checklook(snum,actions); + int ii = 40; if (p->on_crane != nullptr) goto HORIZONLY; @@ -2859,8 +2859,6 @@ void processinput_d(int snum) // Shrinking code - i = 40; - if (psectlotag == ST_2_UNDERWATER) { underwater(snum, actions, psect, fz, cz); @@ -3016,8 +3014,8 @@ void processinput_d(int snum) HORIZONLY: - if (psectlotag == 1 || p->spritebridge == 1) i = (4L << 8); - else i = (20L << 8); + if (psectlotag == 1 || p->spritebridge == 1) ii = (4L << 8); + else ii = (20L << 8); if (sector[p->cursectnum].lotag == 2) k = 0; else k = 1; @@ -3033,7 +3031,7 @@ HORIZONLY: else clipmove_ex(&p->posx, &p->posy, &p->posz, &p->cursectnum, - p->posxv, p->posyv, 164L, (4L << 8), i, CLIPMASK0, clip); + p->posxv, p->posyv, 164L, (4L << 8), ii, CLIPMASK0, clip); if (p->jetpack_on == 0 && psectlotag != 2 && psectlotag != 1 && shrunk) p->posz += 32 << 8; diff --git a/source/games/duke/src/player_r.cpp b/source/games/duke/src/player_r.cpp index b31aa4489..4a408dafb 100644 --- a/source/games/duke/src/player_r.cpp +++ b/source/games/duke/src/player_r.cpp @@ -3677,9 +3677,8 @@ void processinput_r(int snum) if (p->transporter_hold < 0) p->transporter_hold++; - if (p->newowner >= 0) + if (p->newOwner != nullptr) { - i = p->newowner; p->posxv = p->posyv = s->xvel = 0; fi.doincrements(p); diff --git a/source/games/duke/src/premap.cpp b/source/games/duke/src/premap.cpp index 2f8cbe692..800f2cfa1 100644 --- a/source/games/duke/src/premap.cpp +++ b/source/games/duke/src/premap.cpp @@ -142,7 +142,7 @@ void resetplayerstats(int snum) p->angle.olook_ang = p->angle.look_ang = buildlook(512 - ((currentLevel->levelNumber & 1) << 10)); p->angle.orotscrnang = p->angle.rotscrnang = buildlook(0); - p->newowner =-1; + p->newOwner =nullptr; p->jumping_counter = 0; p->hard_landing = 0; p->posxv = 0; //!! diff --git a/source/games/duke/src/render.cpp b/source/games/duke/src/render.cpp index 287e9b0e3..37ecd95db 100644 --- a/source/games/duke/src/render.cpp +++ b/source/games/duke/src/render.cpp @@ -258,9 +258,9 @@ void renderMirror(int cposx, int cposy, int cposz, binangle cang, fixedhoriz cho // //--------------------------------------------------------------------------- -static inline int16_t getcamspriteang(short const newowner, double const smoothratio) +static inline int16_t getcamspriteang(DDukeActor* newOwner, double const smoothratio) { - return hittype[newowner].tempang + xs_CRoundToInt(fmulscale16(((sprite[newowner].ang - hittype[newowner].tempang + 1024) & 2047) - 1024, smoothratio)); + return newOwner->tempang + xs_CRoundToInt(fmulscale16(((newOwner->s.ang - newOwner->tempang + 1024) & 2047) - 1024, smoothratio)); } //--------------------------------------------------------------------------- @@ -282,9 +282,9 @@ void animatecamsprite(double smoothratio) auto act = &hittype[spriteNum]; auto sp = &act->s; - if (p->newowner >= 0) sp->owner = p->newowner; + if (p->newOwner != nullptr) act->SetOwner(p->newOwner); - if (sp->owner >= 0 && dist(p->GetActor(), act) < VIEWSCREEN_ACTIVE_DISTANCE) + if (act->GetOwner() && dist(p->GetActor(), act) < VIEWSCREEN_ACTIVE_DISTANCE) { auto tex = tileGetTexture(sp->picnum); TileFiles.MakeCanvas(TILE_VIEWSCR, tex->GetDisplayWidth(), tex->GetDisplayHeight()); @@ -294,8 +294,8 @@ void animatecamsprite(double smoothratio) screen->RenderTextureView(canvas, [=](IntRect& rect) { - auto camera = &sprite[sp->owner]; - auto ang = getcamspriteang(sp->owner, smoothratio); + auto camera = &act->GetOwner()->s; + auto ang = getcamspriteang(act->GetOwner(), smoothratio); // Note: no ROR or camera here for now - the current setup has no means to detect these things before rendering the scene itself. drawrooms(camera->x, camera->y, camera->z, ang, 100 + camera->shade, camera->sectnum); // why 'shade'...? display_mirror = 1; // should really be 'display external view'. @@ -592,10 +592,10 @@ void displayrooms(int snum, double smoothratio) } } - if (p->newowner >= 0) + if (p->newOwner != nullptr) { - auto spr = &sprite[p->newowner]; - cang = buildang(getcamspriteang(p->newowner, smoothratio)); + auto spr = &p->newOwner->s; + cang = buildang(getcamspriteang(p->newOwner, smoothratio)); choriz = buildhoriz(spr->shade); cposx = spr->pos.x; cposy = spr->pos.y; @@ -633,7 +633,7 @@ void displayrooms(int snum, double smoothratio) if (p->GetActor()->s.pal == 1) cposz -= (18 << 8); - else if (p->spritebridge == 0 && p->newowner < 0) + else if (p->spritebridge == 0 && p->newOwner == nullptr) { if (cposz < (p->truecz + (4 << 8))) cposz = cz + (4 << 8); else if (cposz > (p->truefz - (4 << 8))) cposz = fz - (4 << 8); diff --git a/source/games/duke/src/savegame.cpp b/source/games/duke/src/savegame.cpp index 1168f0047..c973477a7 100644 --- a/source/games/duke/src/savegame.cpp +++ b/source/games/duke/src/savegame.cpp @@ -173,7 +173,7 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, player_struct& w, ("tipincs", w.tipincs) ("wantweaponfire", w.wantweaponfire) ("holoduke_amount", w.holoduke_amount) - ("newowner", w.newowner) + ("newowner", w.newOwner) ("hurt_delay", w.hurt_delay) ("hbomb_hold_delay", w.hbomb_hold_delay) ("jumping_counter", w.jumping_counter) diff --git a/source/games/duke/src/sectors_d.cpp b/source/games/duke/src/sectors_d.cpp index 63b7d43ce..44863529a 100644 --- a/source/games/duke/src/sectors_d.cpp +++ b/source/games/duke/src/sectors_d.cpp @@ -1451,9 +1451,9 @@ void checkhitsprite_d(DDukeActor* targ, DDukeActor* proj) if (s->statnum == 10) { p = s->yvel; - if (ps[p].newowner >= 0) + if (ps[p].newOwner != nullptr) { - ps[p].newowner = -1; + ps[p].newOwner = nullptr; ps[p].posx = ps[p].oposx; ps[p].posy = ps[p].oposy; ps[p].posz = ps[p].oposz; @@ -1536,7 +1536,7 @@ void checksectors_d(int snum) if (ud.cashman && PlayerInput(snum, SB_OPEN)) fi.lotsofmoney(p->GetActor(), 2); - if (p->newowner >= 0) + if (p->newOwner != nullptr) { if (abs(PlayerInputSideVel(snum)) > 768 || abs(PlayerInputForwardVel(snum)) > 768) { @@ -1553,7 +1553,7 @@ void checksectors_d(int snum) if (PlayerInput(snum, SB_ESCAPE)) { - if (p->newowner >= 0) + if (p->newOwner != nullptr) { i = -1; goto CLEARCAMERAS; @@ -1578,7 +1578,7 @@ void checksectors_d(int snum) if (wall[hitscanwall].lotag) return; - if (p->newowner >= 0) + if (p->newOwner != nullptr) neartag(p->oposx, p->oposy, p->oposz, p->GetActor()->s.sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 1); else { @@ -1618,7 +1618,7 @@ void checksectors_d(int snum) } } - if (p->newowner == -1 && neartagsprite == nullptr && neartagsector == -1 && neartagwall == -1) + if (p->newOwner == nullptr && neartagsprite == nullptr && neartagsector == -1 && neartagwall == -1) if (isanunderoperator(sector[p->GetActor()->s.sectnum].lotag)) neartagsector = p->GetActor()->s.sectnum; @@ -1721,7 +1721,7 @@ void checksectors_d(int snum) p->cursectnum = j; // parallaxtype = 2; - p->newowner = acti->GetIndex(); + p->newOwner = acti; return; } } @@ -1734,7 +1734,7 @@ void checksectors_d(int snum) p->posx = p->oposx; p->posy = p->oposy; p->posz = p->oposz; - p->newowner = -1; + p->newOwner = nullptr; updatesector(p->posx, p->posy, &p->cursectnum); setpal(p); @@ -1745,15 +1745,15 @@ void checksectors_d(int snum) if (act->s.picnum == CAMERA1) act->s.yvel = 0; } } - else if (p->newowner >= 0) - p->newowner = -1; + else if (p->newOwner != nullptr) + p->newOwner = nullptr; return; } } if (!PlayerInput(snum, SB_OPEN)) return; - else if (p->newowner >= 0) { i = -1; goto CLEARCAMERAS; } + else if (p->newOwner != nullptr) { i = -1; goto CLEARCAMERAS; } if (neartagwall == -1 && neartagsector == -1 && neartagsprite == nullptr) if (abs(hits(p->GetActor())) < 512) @@ -1772,7 +1772,7 @@ void checksectors_d(int snum) fi.checkhitswitch(snum, neartagwall, nullptr); return; } - else if (p->newowner >= 0) + else if (p->newOwner != nullptr) { i = -1; goto CLEARCAMERAS; diff --git a/source/games/duke/src/sectors_r.cpp b/source/games/duke/src/sectors_r.cpp index f8a53cc55..c8797371c 100644 --- a/source/games/duke/src/sectors_r.cpp +++ b/source/games/duke/src/sectors_r.cpp @@ -2400,9 +2400,9 @@ void checkhitsprite_r(DDukeActor* targ, DDukeActor* proj) if (s->statnum == 10) { p = s->yvel; - if (ps[p].newowner >= 0) + if (ps[p].newOwner != nullptr) { - ps[p].newowner = -1; + ps[p].newOwner = nullptr; ps[p].posx = ps[p].oposx; ps[p].posy = ps[p].oposy; ps[p].posz = ps[p].oposz; @@ -2556,7 +2556,7 @@ void checksectors_r(int snum) neartag(p->posx, p->posy, p->posz, p->GetActor()->s.sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 3); } - if (p->newowner >= 0) + if (p->newOwner != nullptr) neartag(p->oposx, p->oposy, p->oposz, p->GetActor()->s.sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 1); else { @@ -2589,7 +2589,7 @@ void checksectors_r(int snum) } } - if (p->newowner == -1 && neartagsprite == nullptr && neartagsector == -1 && neartagwall == -1) + if (p->newOwner == nullptr && neartagsprite == nullptr && neartagsector == -1 && neartagwall == -1) if (isanunderoperator(sector[p->GetActor()->s.sectnum].lotag)) neartagsector = p->GetActor()->s.sectnum; diff --git a/source/games/duke/src/types.h b/source/games/duke/src/types.h index 80de7a2fd..d76e0a277 100644 --- a/source/games/duke/src/types.h +++ b/source/games/duke/src/types.h @@ -208,7 +208,7 @@ struct player_struct short ammo_amount[MAX_WEAPONS], frag, fraggedself; short curr_weapon, last_weapon, tipincs, wantweaponfire; - short holoduke_amount, newowner, hurt_delay, hbomb_hold_delay; + short holoduke_amount, hurt_delay, hbomb_hold_delay; short jumping_counter, airleft, knee_incs, access_incs; short ftq, access_wallnum; short got_access, weapon_ang, firstaid_amount; @@ -217,7 +217,7 @@ struct player_struct short cheat_phase; short extra_extra8, quick_kick, last_quick_kick; short heat_amount, timebeforeexit, customexitsound; - DDukeActor* actorsqu, *wackedbyactor, *on_crane, *holoduke_on, *somethingonplayer, *access_spritenum, *dummyplayersprite; + DDukeActor* actorsqu, *wackedbyactor, *on_crane, *holoduke_on, *somethingonplayer, *access_spritenum, *dummyplayersprite, *newOwner; short weaprecs[256], weapreccnt; unsigned int interface_toggle_flag;