mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-27 20:20:40 +00:00
- made DukeActor::s a pointer.
As a reference we would never be able to export this to scripting
This commit is contained in:
parent
61a6321cd6
commit
96d78ab9e6
36 changed files with 1650 additions and 1652 deletions
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -521,7 +521,7 @@ void moveminecart(void)
|
||||||
DukeSectIterator it(csect);
|
DukeSectIterator it(csect);
|
||||||
while (auto a2 = it.Next())
|
while (auto a2 = it.Next())
|
||||||
{
|
{
|
||||||
auto sj = &a2->s;
|
auto sj = a2->s;
|
||||||
if (badguy(sj))
|
if (badguy(sj))
|
||||||
setsprite(a2, cx, cy, sj->z);
|
setsprite(a2, cx, cy, sj->z);
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -57,7 +57,7 @@ void animatesprites_d(int x, int y, int a, int smoothratio)
|
||||||
t = &tsprite[j];
|
t = &tsprite[j];
|
||||||
i = t->owner;
|
i = t->owner;
|
||||||
h = &hittype[i];
|
h = &hittype[i];
|
||||||
s = &h->s;
|
s = h->s;
|
||||||
|
|
||||||
switch (t->picnum)
|
switch (t->picnum)
|
||||||
{
|
{
|
||||||
|
@ -149,9 +149,9 @@ void animatesprites_d(int x, int y, int a, int smoothratio)
|
||||||
t = &tsprite[j];
|
t = &tsprite[j];
|
||||||
i = t->owner;
|
i = t->owner;
|
||||||
h = &hittype[i];
|
h = &hittype[i];
|
||||||
s = &h->s;
|
s = h->s;
|
||||||
auto OwnerAc = h->GetOwner();
|
auto OwnerAc = h->GetOwner();
|
||||||
auto Owner = OwnerAc ? &OwnerAc->s : nullptr;
|
auto Owner = OwnerAc ? OwnerAc->s : nullptr;
|
||||||
|
|
||||||
switch (s->picnum)
|
switch (s->picnum)
|
||||||
{
|
{
|
||||||
|
@ -227,7 +227,7 @@ void animatesprites_d(int x, int y, int a, int smoothratio)
|
||||||
Owner->y - t->y);
|
Owner->y - t->y);
|
||||||
|
|
||||||
if (abs(getincangle(sqa, sqb)) > 512)
|
if (abs(getincangle(sqa, sqb)) > 512)
|
||||||
if (ldist(Owner, t) < ldist(&ps[screenpeek].GetActor()->s, Owner))
|
if (ldist(Owner, t) < ldist(ps[screenpeek].GetActor()->s, Owner))
|
||||||
t->xrepeat = t->yrepeat = 0;
|
t->xrepeat = t->yrepeat = 0;
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
|
@ -336,7 +336,7 @@ void animatesprites_d(int x, int y, int a, int smoothratio)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((display_mirror == 1 || screenpeek != p || !h->GetOwner()) && ud.multimode > 1 && cl_showweapon && ps[p].GetActor()->s.extra > 0 && ps[p].curr_weapon > 0)
|
if ((display_mirror == 1 || screenpeek != p || !h->GetOwner()) && ud.multimode > 1 && cl_showweapon && ps[p].GetActor()->s->extra > 0 && ps[p].curr_weapon > 0)
|
||||||
{
|
{
|
||||||
auto newtspr = &tsprite[spritesortcnt];
|
auto newtspr = &tsprite[spritesortcnt];
|
||||||
memcpy(newtspr, t, sizeof(spritetype));
|
memcpy(newtspr, t, sizeof(spritetype));
|
||||||
|
|
|
@ -52,7 +52,7 @@ void animatesprites_r(int x, int y, int a, int smoothratio)
|
||||||
t = &tsprite[j];
|
t = &tsprite[j];
|
||||||
i = t->owner;
|
i = t->owner;
|
||||||
h = &hittype[i];
|
h = &hittype[i];
|
||||||
s = &h->s;
|
s = h->s;
|
||||||
|
|
||||||
switch (t->picnum)
|
switch (t->picnum)
|
||||||
{
|
{
|
||||||
|
@ -139,9 +139,9 @@ void animatesprites_r(int x, int y, int a, int smoothratio)
|
||||||
t = &tsprite[j];
|
t = &tsprite[j];
|
||||||
i = t->owner;
|
i = t->owner;
|
||||||
h = &hittype[i];
|
h = &hittype[i];
|
||||||
s = &h->s;
|
s = h->s;
|
||||||
auto OwnerAc = h->GetOwner();
|
auto OwnerAc = h->GetOwner();
|
||||||
auto Owner = OwnerAc ? &OwnerAc->s : nullptr;
|
auto Owner = OwnerAc ? OwnerAc->s : nullptr;
|
||||||
|
|
||||||
switch (s->picnum)
|
switch (s->picnum)
|
||||||
{
|
{
|
||||||
|
@ -226,7 +226,7 @@ void animatesprites_r(int x, int y, int a, int smoothratio)
|
||||||
Owner->y - t->y);
|
Owner->y - t->y);
|
||||||
|
|
||||||
if (abs(getincangle(sqa, sqb)) > 512)
|
if (abs(getincangle(sqa, sqb)) > 512)
|
||||||
if (ldist(Owner, t) < ldist(&ps[screenpeek].GetActor()->s, Owner))
|
if (ldist(Owner, t) < ldist(ps[screenpeek].GetActor()->s, Owner))
|
||||||
t->xrepeat = t->yrepeat = 0;
|
t->xrepeat = t->yrepeat = 0;
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
|
@ -382,7 +382,7 @@ void animatesprites_r(int x, int y, int a, int smoothratio)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((display_mirror == 1 || screenpeek != p || !h->GetOwner()) && ud.multimode > 1 && cl_showweapon && ps[p].GetActor()->s.extra > 0 && ps[p].curr_weapon > 0)
|
if ((display_mirror == 1 || screenpeek != p || !h->GetOwner()) && ud.multimode > 1 && cl_showweapon && ps[p].GetActor()->s->extra > 0 && ps[p].curr_weapon > 0)
|
||||||
{
|
{
|
||||||
auto newtspr = &tsprite[spritesortcnt];
|
auto newtspr = &tsprite[spritesortcnt];
|
||||||
memcpy(newtspr, t, sizeof(spritetype));
|
memcpy(newtspr, t, sizeof(spritetype));
|
||||||
|
|
|
@ -38,17 +38,17 @@ void ballreturn(DDukeActor *ball)
|
||||||
DukeStatIterator it(STAT_BOWLING);
|
DukeStatIterator it(STAT_BOWLING);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
if (act->s.picnum == RRTILE281 && ball->s.sectnum == act->s.sectnum)
|
if (act->s->picnum == RRTILE281 && ball->s->sectnum == act->s->sectnum)
|
||||||
{
|
{
|
||||||
DukeStatIterator it2(STAT_BOWLING);
|
DukeStatIterator it2(STAT_BOWLING);
|
||||||
while (auto act2 = it2.Next())
|
while (auto act2 = it2.Next())
|
||||||
{
|
{
|
||||||
if (act2->s.picnum == RRTILE282 && act->s.hitag == act2->s.hitag)
|
if (act2->s->picnum == RRTILE282 && act->s->hitag == act2->s->hitag)
|
||||||
spawn(act2, BOWLINGBALLSPRITE);
|
spawn(act2, BOWLINGBALLSPRITE);
|
||||||
if (act2->s.picnum == RRTILE280 && act->s.hitag == act2->s.hitag && act2->s.lotag == 0)
|
if (act2->s->picnum == RRTILE280 && act->s->hitag == act2->s->hitag && act2->s->lotag == 0)
|
||||||
{
|
{
|
||||||
act2->s.lotag = 100;
|
act2->s->lotag = 100;
|
||||||
act2->s.extra++;
|
act2->s->extra++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -94,14 +94,14 @@ short checkpins(short sect)
|
||||||
DukeSectIterator it(sect);
|
DukeSectIterator it(sect);
|
||||||
while (auto a2 = it.Next())
|
while (auto a2 = it.Next())
|
||||||
{
|
{
|
||||||
if (a2->s.picnum == RRTILE3440)
|
if (a2->s->picnum == RRTILE3440)
|
||||||
{
|
{
|
||||||
pin++;
|
pin++;
|
||||||
pins[a2->s.lotag] = 1;
|
pins[a2->s->lotag] = 1;
|
||||||
}
|
}
|
||||||
if (a2->s.picnum == RRTILE280)
|
if (a2->s->picnum == RRTILE280)
|
||||||
{
|
{
|
||||||
tag = a2->s.hitag;
|
tag = a2->s->hitag;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -171,28 +171,28 @@ void resetpins(short sect)
|
||||||
DukeSectIterator it(sect);
|
DukeSectIterator it(sect);
|
||||||
while (auto a2 = it.Next())
|
while (auto a2 = it.Next())
|
||||||
{
|
{
|
||||||
if (a2->s.picnum == RRTILE3440)
|
if (a2->s->picnum == RRTILE3440)
|
||||||
deletesprite(a2);
|
deletesprite(a2);
|
||||||
}
|
}
|
||||||
it.Reset(sect);
|
it.Reset(sect);
|
||||||
while (auto a2 = it.Next())
|
while (auto a2 = it.Next())
|
||||||
{
|
{
|
||||||
if (a2->s.picnum == 283)
|
if (a2->s->picnum == 283)
|
||||||
{
|
{
|
||||||
auto spawned = spawn(a2, RRTILE3440);
|
auto spawned = spawn(a2, RRTILE3440);
|
||||||
spawned->s.lotag = a2->s.lotag;
|
spawned->s->lotag = a2->s->lotag;
|
||||||
if (spawned->s.lotag == 3 || spawned->s.lotag == 5)
|
if (spawned->s->lotag == 3 || spawned->s->lotag == 5)
|
||||||
{
|
{
|
||||||
spawned->s.clipdist = (1 + (krand() % 1)) * 16 + 32;
|
spawned->s->clipdist = (1 + (krand() % 1)) * 16 + 32;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
spawned->s.clipdist = (1 + (krand() % 1)) * 16 + 32;
|
spawned->s->clipdist = (1 + (krand() % 1)) * 16 + 32;
|
||||||
}
|
}
|
||||||
spawned->s.ang -= ((krand() & 32) - (krand() & 64)) & 2047;
|
spawned->s->ang -= ((krand() & 32) - (krand() & 64)) & 2047;
|
||||||
}
|
}
|
||||||
if (a2->s.picnum == 280)
|
if (a2->s->picnum == 280)
|
||||||
tag = a2->s.hitag;
|
tag = a2->s->hitag;
|
||||||
}
|
}
|
||||||
if (tag)
|
if (tag)
|
||||||
{
|
{
|
||||||
|
|
|
@ -90,9 +90,9 @@ static int ccmd_spawn(CCmdFuncPtr parm)
|
||||||
}
|
}
|
||||||
|
|
||||||
auto spawned = spawn(ps[myconnectindex].GetActor(), picnum);
|
auto spawned = spawn(ps[myconnectindex].GetActor(), picnum);
|
||||||
if (set & 1) spawned->s.pal = (char)pal;
|
if (set & 1) spawned->s->pal = (char)pal;
|
||||||
if (set & 2) spawned->s.cstat = (short)cstat;
|
if (set & 2) spawned->s->cstat = (short)cstat;
|
||||||
if (set & 4) spawned->s.ang = ang;
|
if (set & 4) spawned->s->ang = ang;
|
||||||
if (set & 8) {
|
if (set & 8) {
|
||||||
if (setsprite(spawned, x, y, z) < 0)
|
if (setsprite(spawned, x, y, z) < 0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -67,12 +67,12 @@ static const char *cheatGod(int myconnectindex, int state)
|
||||||
auto act = p->GetActor();
|
auto act = p->GetActor();
|
||||||
|
|
||||||
p->resurrected = true;
|
p->resurrected = true;
|
||||||
act->s.extra = gs.max_player_health;
|
act->s->extra = gs.max_player_health;
|
||||||
act->extra = 0;
|
act->extra = 0;
|
||||||
if (ud.god)
|
if (ud.god)
|
||||||
{
|
{
|
||||||
if (isRRRA()) S_PlaySound(218, CHAN_AUTO, CHANF_UI);
|
if (isRRRA()) S_PlaySound(218, CHAN_AUTO, CHANF_UI);
|
||||||
act->s.cstat = 257;
|
act->s->cstat = 257;
|
||||||
|
|
||||||
act->temp_data[0] = 0;
|
act->temp_data[0] = 0;
|
||||||
act->temp_data[1] = 0;
|
act->temp_data[1] = 0;
|
||||||
|
@ -81,9 +81,9 @@ static const char *cheatGod(int myconnectindex, int state)
|
||||||
act->temp_data[4] = 0;
|
act->temp_data[4] = 0;
|
||||||
act->temp_data[5] = 0;
|
act->temp_data[5] = 0;
|
||||||
|
|
||||||
act->s.hitag = 0;
|
act->s->hitag = 0;
|
||||||
act->s.lotag = 0;
|
act->s->lotag = 0;
|
||||||
act->s.pal =
|
act->s->pal =
|
||||||
ps[myconnectindex].palookup;
|
ps[myconnectindex].palookup;
|
||||||
|
|
||||||
return quoteMgr.GetQuote(QUOTE_CHEAT_GODMODE_ON);
|
return quoteMgr.GetQuote(QUOTE_CHEAT_GODMODE_ON);
|
||||||
|
@ -91,7 +91,7 @@ static const char *cheatGod(int myconnectindex, int state)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ud.god = 0;
|
ud.god = 0;
|
||||||
act->s.extra = gs.max_player_health;
|
act->s->extra = gs.max_player_health;
|
||||||
act->extra = -1;
|
act->extra = -1;
|
||||||
ps[myconnectindex].last_extra = gs.max_player_health;
|
ps[myconnectindex].last_extra = gs.max_player_health;
|
||||||
return quoteMgr.GetQuote(QUOTE_CHEAT_GODMODE_OFF);
|
return quoteMgr.GetQuote(QUOTE_CHEAT_GODMODE_OFF);
|
||||||
|
@ -121,9 +121,9 @@ static const char *cheatKfc(int player)
|
||||||
for (int i = 0; i < 7; i++)
|
for (int i = 0; i < 7; i++)
|
||||||
{
|
{
|
||||||
auto spr = spawn(ps[player].GetActor(), TILE_HEN);
|
auto spr = spawn(ps[player].GetActor(), TILE_HEN);
|
||||||
spr->s.pal = 1;
|
spr->s->pal = 1;
|
||||||
spr->s.xrepeat = spr->s.xrepeat << 2;
|
spr->s->xrepeat = spr->s->xrepeat << 2;
|
||||||
spr->s.yrepeat = spr->s.yrepeat << 2;
|
spr->s->yrepeat = spr->s->yrepeat << 2;
|
||||||
}
|
}
|
||||||
return quoteMgr.GetQuote(QUOTE_CHEAT_KFC);
|
return quoteMgr.GetQuote(QUOTE_CHEAT_KFC);
|
||||||
}
|
}
|
||||||
|
@ -197,7 +197,7 @@ const char* GameInterface::GenericCheat(int player, int cheat)
|
||||||
ps[player].gotweapon.Zero();
|
ps[player].gotweapon.Zero();
|
||||||
ps[player].curr_weapon = KNEE_WEAPON;
|
ps[player].curr_weapon = KNEE_WEAPON;
|
||||||
ps[player].nocheat = 1;
|
ps[player].nocheat = 1;
|
||||||
ps[player].GetActor()->s.extra = 1;
|
ps[player].GetActor()->s->extra = 1;
|
||||||
return quoteMgr.GetQuote(QUOTE_YERFUCKED);
|
return quoteMgr.GetQuote(QUOTE_YERFUCKED);
|
||||||
|
|
||||||
case CHT_AARON:
|
case CHT_AARON:
|
||||||
|
@ -473,7 +473,7 @@ static void cmd_Give(int player, uint8_t** stream, bool skip)
|
||||||
int type = ReadByte(stream);
|
int type = ReadByte(stream);
|
||||||
if (skip) return;
|
if (skip) return;
|
||||||
|
|
||||||
if (numplayers != 1 || gamestate != GS_LEVEL || ps[player].GetActor()->s.extra <= 0)
|
if (numplayers != 1 || gamestate != GS_LEVEL || ps[player].GetActor()->s->extra <= 0)
|
||||||
{
|
{
|
||||||
Printf("give: Cannot give while dead or not in a single-player game.\n");
|
Printf("give: Cannot give while dead or not in a single-player game.\n");
|
||||||
return;
|
return;
|
||||||
|
@ -487,7 +487,7 @@ static void cmd_Give(int player, uint8_t** stream, bool skip)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GIVE_HEALTH:
|
case GIVE_HEALTH:
|
||||||
ps[player].GetActor()->s.extra = gs.max_player_health << 1;
|
ps[player].GetActor()->s->extra = gs.max_player_health << 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GIVE_WEAPONS:
|
case GIVE_WEAPONS:
|
||||||
|
|
|
@ -92,7 +92,7 @@ bool GameInterface::CanSave()
|
||||||
{
|
{
|
||||||
if (ud.recstat == 2 || gamestate != GS_LEVEL) return false;
|
if (ud.recstat == 2 || gamestate != GS_LEVEL) return false;
|
||||||
auto &myplayer = ps[myconnectindex];
|
auto &myplayer = ps[myconnectindex];
|
||||||
return (myplayer.GetActor()->s.extra > 0);
|
return (myplayer.GetActor()->s->extra > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GameInterface::StartGame(FNewGameStartup& gs)
|
bool GameInterface::StartGame(FNewGameStartup& gs)
|
||||||
|
|
|
@ -78,7 +78,7 @@ public:
|
||||||
while (index < MAXSPRITES)
|
while (index < MAXSPRITES)
|
||||||
{
|
{
|
||||||
auto p = &hittype[index++];
|
auto p = &hittype[index++];
|
||||||
if (p->s.statnum != MAXSTATUS) return p;
|
if (p->s->statnum != MAXSTATUS) return p;
|
||||||
}
|
}
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
@ -91,7 +91,7 @@ inline DDukeActor* player_struct::GetActor()
|
||||||
|
|
||||||
inline int player_struct::GetPlayerNum()
|
inline int player_struct::GetPlayerNum()
|
||||||
{
|
{
|
||||||
return GetActor()->s.yvel;
|
return GetActor()->s->yvel;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Refactoring helpers/intermediates
|
// Refactoring helpers/intermediates
|
||||||
|
@ -141,7 +141,7 @@ inline int ActorToScriptIndex(DDukeActor* a)
|
||||||
inline DDukeActor* ScriptIndexToActor(int index)
|
inline DDukeActor* ScriptIndexToActor(int index)
|
||||||
{
|
{
|
||||||
// only allow valid actors to get through here. Everything else gets null'ed.
|
// only allow valid actors to get through here. Everything else gets null'ed.
|
||||||
if (index < 0 || index >= MAXSPRITES || hittype[index].s.statnum == MAXSTATUS) return nullptr;
|
if (index < 0 || index >= MAXSPRITES || hittype[index].s->statnum == MAXSTATUS) return nullptr;
|
||||||
return &hittype[index];
|
return &hittype[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -156,22 +156,22 @@ inline DDukeActor* spawn(DDukeActor* spawner, int type)
|
||||||
|
|
||||||
inline int ldist(DDukeActor* s1, DDukeActor* s2)
|
inline int ldist(DDukeActor* s1, DDukeActor* s2)
|
||||||
{
|
{
|
||||||
return ldist(&s1->s, &s2->s);
|
return ldist(s1->s, s2->s);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int dist(DDukeActor* s1, DDukeActor* s2)
|
inline int dist(DDukeActor* s1, DDukeActor* s2)
|
||||||
{
|
{
|
||||||
return dist(&s1->s, &s2->s);
|
return dist(s1->s, s2->s);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int badguy(DDukeActor* pSprite)
|
inline int badguy(DDukeActor* pSprite)
|
||||||
{
|
{
|
||||||
return badguypic(pSprite->s.picnum);
|
return badguypic(pSprite->s->picnum);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int bossguy(DDukeActor* pSprite)
|
inline int bossguy(DDukeActor* pSprite)
|
||||||
{
|
{
|
||||||
return bossguypic(pSprite->s.picnum);
|
return bossguypic(pSprite->s->picnum);
|
||||||
}
|
}
|
||||||
|
|
||||||
// old interface versions of already changed functions
|
// old interface versions of already changed functions
|
||||||
|
|
|
@ -416,7 +416,7 @@ bool GameInterface::DrawAutomapPlayer(int cposx, int cposy, int czoom, int cang,
|
||||||
DukeSectIterator it(i);
|
DukeSectIterator it(i);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
spr = &act->s;
|
spr = act->s;
|
||||||
|
|
||||||
if (act == pactor || (spr->cstat & 0x8000) || spr->cstat == 257 || spr->xrepeat == 0) continue;
|
if (act == pactor || (spr->cstat & 0x8000) || spr->cstat == 257 || spr->xrepeat == 0) continue;
|
||||||
|
|
||||||
|
@ -557,7 +557,7 @@ bool GameInterface::DrawAutomapPlayer(int cposx, int cposy, int czoom, int cang,
|
||||||
for (p = connecthead; p >= 0; p = connectpoint2[p])
|
for (p = connecthead; p >= 0; p = connectpoint2[p])
|
||||||
{
|
{
|
||||||
auto act = ps[p].GetActor();
|
auto act = ps[p].GetActor();
|
||||||
auto pspr = &act->s;
|
auto pspr = act->s;
|
||||||
auto spos = pspr->interpolatedvec2(smoothratio);
|
auto spos = pspr->interpolatedvec2(smoothratio);
|
||||||
daang = ((!SyncInput() ? pspr->ang : pspr->interpolatedang(smoothratio)) - cang) & 2047;
|
daang = ((!SyncInput() ? pspr->ang : pspr->interpolatedang(smoothratio)) - cang) & 2047;
|
||||||
|
|
||||||
|
|
|
@ -1033,7 +1033,7 @@ void DoSector(char bSet, int lVar1, int lLabelID, int lVar2, DDukeActor* sActor,
|
||||||
if (lVar1 == g_iThisActorID)
|
if (lVar1 == g_iThisActorID)
|
||||||
{
|
{
|
||||||
// if they've asked for 'this', then use 'this'...
|
// if they've asked for 'this', then use 'this'...
|
||||||
iSector = sActor->s.sectnum;
|
iSector = sActor->s->sectnum;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1161,7 +1161,7 @@ void DoActor(bool bSet, int lVar1, int lLabelID, int lVar2, DDukeActor* sActor,
|
||||||
iActor = GetGameVarID(lVar1, sActor, sPlayer);
|
iActor = GetGameVarID(lVar1, sActor, sPlayer);
|
||||||
act = ScriptIndexToActor(iActor);
|
act = ScriptIndexToActor(iActor);
|
||||||
}
|
}
|
||||||
auto spr = &act->s;
|
auto spr = act->s;
|
||||||
|
|
||||||
if (iActor < 0 || iActor >= MAXSPRITES || spr->statnum == MAXSTATUS)
|
if (iActor < 0 || iActor >= MAXSPRITES || spr->statnum == MAXSTATUS)
|
||||||
{
|
{
|
||||||
|
@ -1404,7 +1404,7 @@ static int ifcanshoottarget(DDukeActor *actor, int g_p, int g_x)
|
||||||
{
|
{
|
||||||
short sclip, angdif;
|
short sclip, angdif;
|
||||||
|
|
||||||
if (badguy(actor) && actor->s.xrepeat > 56)
|
if (badguy(actor) && actor->s->xrepeat > 56)
|
||||||
{
|
{
|
||||||
sclip = 3084;
|
sclip = 3084;
|
||||||
angdif = 48;
|
angdif = 48;
|
||||||
|
@ -1423,21 +1423,21 @@ static int ifcanshoottarget(DDukeActor *actor, int g_p, int g_x)
|
||||||
}
|
}
|
||||||
if (j > sclip)
|
if (j > sclip)
|
||||||
{
|
{
|
||||||
if (hit != nullptr && hit->s.picnum == actor->s.picnum)
|
if (hit != nullptr && hit->s->picnum == actor->s->picnum)
|
||||||
j = 0;
|
j = 0;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
actor->s.ang += angdif; j = hitasprite(actor, &hit); actor->s.ang -= angdif;
|
actor->s->ang += angdif; j = hitasprite(actor, &hit); actor->s->ang -= angdif;
|
||||||
if (j > sclip)
|
if (j > sclip)
|
||||||
{
|
{
|
||||||
if (hit != nullptr && hit->s.picnum == actor->s.picnum)
|
if (hit != nullptr && hit->s->picnum == actor->s->picnum)
|
||||||
j = 0;
|
j = 0;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
actor->s.ang -= angdif; j = hitasprite(actor, &hit); actor->s.ang += angdif;
|
actor->s->ang -= angdif; j = hitasprite(actor, &hit); actor->s->ang += angdif;
|
||||||
if (j > 768)
|
if (j > 768)
|
||||||
{
|
{
|
||||||
if (hit != nullptr && hit->s.picnum == actor->s.picnum)
|
if (hit != nullptr && hit->s->picnum == actor->s->picnum)
|
||||||
j = 0;
|
j = 0;
|
||||||
else j = 1;
|
else j = 1;
|
||||||
}
|
}
|
||||||
|
@ -1463,7 +1463,7 @@ static bool ifcansee(DDukeActor* actor, int pnum)
|
||||||
{
|
{
|
||||||
int j;
|
int j;
|
||||||
DDukeActor* tosee;
|
DDukeActor* tosee;
|
||||||
auto spr = &actor->s;
|
auto spr = actor->s;
|
||||||
|
|
||||||
// select sprite for monster to target
|
// select sprite for monster to target
|
||||||
// if holoduke is on, let them target holoduke first.
|
// if holoduke is on, let them target holoduke first.
|
||||||
|
@ -1471,7 +1471,7 @@ static bool ifcansee(DDukeActor* actor, int pnum)
|
||||||
if (ps[pnum].holoduke_on != nullptr && !isRR())
|
if (ps[pnum].holoduke_on != nullptr && !isRR())
|
||||||
{
|
{
|
||||||
tosee = ps[pnum].holoduke_on;
|
tosee = ps[pnum].holoduke_on;
|
||||||
j = cansee(spr->x, spr->y, spr->z - (krand() & ((32 << 8) - 1)), spr->sectnum, tosee->s.x, tosee->s.y, tosee->s.z, tosee->s.sectnum);
|
j = cansee(spr->x, spr->y, spr->z - (krand() & ((32 << 8) - 1)), spr->sectnum, tosee->s->x, tosee->s->y, tosee->s->z, tosee->s->sectnum);
|
||||||
|
|
||||||
if (j == 0)
|
if (j == 0)
|
||||||
{
|
{
|
||||||
|
@ -1483,7 +1483,7 @@ static bool ifcansee(DDukeActor* actor, int pnum)
|
||||||
else tosee = ps[pnum].GetActor(); // holoduke not on. look for player
|
else tosee = ps[pnum].GetActor(); // holoduke not on. look for player
|
||||||
|
|
||||||
// can they see player, (or player's holoduke)
|
// can they see player, (or player's holoduke)
|
||||||
j = cansee(spr->x, spr->y, spr->z - (krand() & ((47 << 8))), spr->sectnum, tosee->s.x, tosee->s.y, tosee->s.z - ((isRR()? 28 : 24) << 8), tosee->s.sectnum);
|
j = cansee(spr->x, spr->y, spr->z - (krand() & ((47 << 8))), spr->sectnum, tosee->s->x, tosee->s->y, tosee->s->z - ((isRR()? 28 : 24) << 8), tosee->s->sectnum);
|
||||||
|
|
||||||
if (j == 0)
|
if (j == 0)
|
||||||
{
|
{
|
||||||
|
@ -1495,8 +1495,8 @@ static bool ifcansee(DDukeActor* actor, int pnum)
|
||||||
{
|
{
|
||||||
// else, they did see it.
|
// else, they did see it.
|
||||||
// save where we were looking..
|
// save where we were looking..
|
||||||
actor->lastvx = tosee->s.x;
|
actor->lastvx = tosee->s->x;
|
||||||
actor->lastvy = tosee->s.y;
|
actor->lastvy = tosee->s->y;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (j == 1 && (spr->statnum == STAT_ACTOR || spr->statnum == STAT_STANDABLE))
|
if (j == 1 && (spr->statnum == STAT_ACTOR || spr->statnum == STAT_STANDABLE))
|
||||||
|
@ -1511,7 +1511,7 @@ static bool ifcansee(DDukeActor* actor, int pnum)
|
||||||
int ParseState::parse(void)
|
int ParseState::parse(void)
|
||||||
{
|
{
|
||||||
int j, l, s;
|
int j, l, s;
|
||||||
auto g_sp = g_ac? &g_ac->s : nullptr;
|
auto g_sp = g_ac? g_ac->s : nullptr;
|
||||||
|
|
||||||
if(killit_flag) return 1;
|
if(killit_flag) return 1;
|
||||||
|
|
||||||
|
@ -1535,12 +1535,12 @@ int ParseState::parse(void)
|
||||||
parseifelse(ifcanshoottarget(g_ac, g_p, g_x));
|
parseifelse(ifcanshoottarget(g_ac, g_p, g_x));
|
||||||
break;
|
break;
|
||||||
case concmd_ifcanseetarget:
|
case concmd_ifcanseetarget:
|
||||||
j = cansee(g_sp->x, g_sp->y, g_sp->z - ((krand() & 41) << 8), g_sp->sectnum, ps[g_p].posx, ps[g_p].posy, ps[g_p].posz/*-((krand()&41)<<8)*/, ps[g_p].GetActor()->s.sectnum);
|
j = cansee(g_sp->x, g_sp->y, g_sp->z - ((krand() & 41) << 8), g_sp->sectnum, ps[g_p].posx, ps[g_p].posy, ps[g_p].posz/*-((krand()&41)<<8)*/, ps[g_p].GetActor()->s->sectnum);
|
||||||
parseifelse(j);
|
parseifelse(j);
|
||||||
if (j) g_ac->timetosleep = SLEEPTIME;
|
if (j) g_ac->timetosleep = SLEEPTIME;
|
||||||
break;
|
break;
|
||||||
case concmd_ifnocover:
|
case concmd_ifnocover:
|
||||||
j = cansee(g_sp->x, g_sp->y, g_sp->z, g_sp->sectnum, ps[g_p].posx, ps[g_p].posy, ps[g_p].posz, ps[g_p].GetActor()->s.sectnum);
|
j = cansee(g_sp->x, g_sp->y, g_sp->z, g_sp->sectnum, ps[g_p].posx, ps[g_p].posy, ps[g_p].posz, ps[g_p].GetActor()->s->sectnum);
|
||||||
parseifelse(j);
|
parseifelse(j);
|
||||||
if (j) g_ac->timetosleep = SLEEPTIME;
|
if (j) g_ac->timetosleep = SLEEPTIME;
|
||||||
break;
|
break;
|
||||||
|
@ -1953,7 +1953,7 @@ int ParseState::parse(void)
|
||||||
case concmd_isdrunk: // todo: move out to player_r.
|
case concmd_isdrunk: // todo: move out to player_r.
|
||||||
insptr++;
|
insptr++;
|
||||||
ps[g_p].drink_amt += *insptr;
|
ps[g_p].drink_amt += *insptr;
|
||||||
j = ps[g_p].GetActor()->s.extra;
|
j = ps[g_p].GetActor()->s->extra;
|
||||||
if (j > 0)
|
if (j > 0)
|
||||||
j += *insptr;
|
j += *insptr;
|
||||||
if (j > gs.max_player_health * 2)
|
if (j > gs.max_player_health * 2)
|
||||||
|
@ -1972,14 +1972,14 @@ int ParseState::parse(void)
|
||||||
ps[g_p].last_extra = j;
|
ps[g_p].last_extra = j;
|
||||||
}
|
}
|
||||||
|
|
||||||
ps[g_p].GetActor()->s.extra = j;
|
ps[g_p].GetActor()->s->extra = j;
|
||||||
}
|
}
|
||||||
if (ps[g_p].drink_amt > 100)
|
if (ps[g_p].drink_amt > 100)
|
||||||
ps[g_p].drink_amt = 100;
|
ps[g_p].drink_amt = 100;
|
||||||
|
|
||||||
if (ps[g_p].GetActor()->s.extra >= gs.max_player_health)
|
if (ps[g_p].GetActor()->s->extra >= gs.max_player_health)
|
||||||
{
|
{
|
||||||
ps[g_p].GetActor()->s.extra = gs.max_player_health;
|
ps[g_p].GetActor()->s->extra = gs.max_player_health;
|
||||||
ps[g_p].last_extra = gs.max_player_health;
|
ps[g_p].last_extra = gs.max_player_health;
|
||||||
}
|
}
|
||||||
insptr++;
|
insptr++;
|
||||||
|
@ -1994,8 +1994,8 @@ int ParseState::parse(void)
|
||||||
break;
|
break;
|
||||||
case concmd_larrybird:
|
case concmd_larrybird:
|
||||||
insptr++;
|
insptr++;
|
||||||
ps[g_p].posz = sector[ps[g_p].GetActor()->s.sectnum].ceilingz;
|
ps[g_p].posz = sector[ps[g_p].GetActor()->s->sectnum].ceilingz;
|
||||||
ps[g_p].GetActor()->s.z = ps[g_p].posz;
|
ps[g_p].GetActor()->s->z = ps[g_p].posz;
|
||||||
break;
|
break;
|
||||||
case concmd_destroyit:
|
case concmd_destroyit:
|
||||||
insptr++;
|
insptr++;
|
||||||
|
@ -2011,7 +2011,7 @@ int ParseState::parse(void)
|
||||||
ps[g_p].drink_amt -= *insptr;
|
ps[g_p].drink_amt -= *insptr;
|
||||||
if (ps[g_p].drink_amt < 0)
|
if (ps[g_p].drink_amt < 0)
|
||||||
ps[g_p].drink_amt = 0;
|
ps[g_p].drink_amt = 0;
|
||||||
j = ps[g_p].GetActor()->s.extra;
|
j = ps[g_p].GetActor()->s->extra;
|
||||||
if (g_sp->picnum != TILE_ATOMICHEALTH)
|
if (g_sp->picnum != TILE_ATOMICHEALTH)
|
||||||
{
|
{
|
||||||
if (j > gs.max_player_health && *insptr > 0)
|
if (j > gs.max_player_health && *insptr > 0)
|
||||||
|
@ -2048,7 +2048,7 @@ int ParseState::parse(void)
|
||||||
ps[g_p].last_extra = j;
|
ps[g_p].last_extra = j;
|
||||||
}
|
}
|
||||||
|
|
||||||
ps[g_p].GetActor()->s.extra = j;
|
ps[g_p].GetActor()->s->extra = j;
|
||||||
}
|
}
|
||||||
|
|
||||||
insptr++;
|
insptr++;
|
||||||
|
@ -2069,12 +2069,12 @@ int ParseState::parse(void)
|
||||||
DukeStatIterator it(STAT_ACTOR);
|
DukeStatIterator it(STAT_ACTOR);
|
||||||
while (auto j = it.Next())
|
while (auto j = it.Next())
|
||||||
{
|
{
|
||||||
if (j->s.picnum == TILE_CAMERA1)
|
if (j->s->picnum == TILE_CAMERA1)
|
||||||
j->s.yvel = 0;
|
j->s->yvel = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
j = ps[g_p].GetActor()->s.extra;
|
j = ps[g_p].GetActor()->s->extra;
|
||||||
|
|
||||||
if(g_sp->picnum != TILE_ATOMICHEALTH)
|
if(g_sp->picnum != TILE_ATOMICHEALTH)
|
||||||
{
|
{
|
||||||
|
@ -2112,7 +2112,7 @@ int ParseState::parse(void)
|
||||||
ps[g_p].last_extra = j;
|
ps[g_p].last_extra = j;
|
||||||
}
|
}
|
||||||
|
|
||||||
ps[g_p].GetActor()->s.extra = j;
|
ps[g_p].GetActor()->s->extra = j;
|
||||||
}
|
}
|
||||||
|
|
||||||
insptr++;
|
insptr++;
|
||||||
|
@ -2188,9 +2188,9 @@ int ParseState::parse(void)
|
||||||
dnum + s, g_sp->shade, 32 + (krand() & 15), 32 + (krand() & 15),
|
dnum + s, g_sp->shade, 32 + (krand() & 15), 32 + (krand() & 15),
|
||||||
krand() & 2047, (krand() & 127) + 32, -(krand() & 2047), g_ac, 5);
|
krand() & 2047, (krand() & 127) + 32, -(krand() & 2047), g_ac, 5);
|
||||||
if(weap)
|
if(weap)
|
||||||
l->s.yvel = gs.weaponsandammosprites[j%14];
|
l->s->yvel = gs.weaponsandammosprites[j%14];
|
||||||
else l->s.yvel = -1;
|
else l->s->yvel = -1;
|
||||||
l->s.pal = g_sp->pal;
|
l->s->pal = g_sp->pal;
|
||||||
}
|
}
|
||||||
insptr++;
|
insptr++;
|
||||||
}
|
}
|
||||||
|
@ -2423,7 +2423,7 @@ int ParseState::parse(void)
|
||||||
j = 1;
|
j = 1;
|
||||||
else if( (l& pkicking) && ( ps[g_p].quick_kick > 0 || ( ps[g_p].curr_weapon == KNEE_WEAPON && ps[g_p].kickback_pic > 0 ) ) )
|
else if( (l& pkicking) && ( ps[g_p].quick_kick > 0 || ( ps[g_p].curr_weapon == KNEE_WEAPON && ps[g_p].kickback_pic > 0 ) ) )
|
||||||
j = 1;
|
j = 1;
|
||||||
else if( (l& pshrunk) && ps[g_p].GetActor()->s.xrepeat < (isRR() ? 8 : 32))
|
else if( (l& pshrunk) && ps[g_p].GetActor()->s->xrepeat < (isRR() ? 8 : 32))
|
||||||
j = 1;
|
j = 1;
|
||||||
else if( (l& pjetpack) && ps[g_p].jetpack_on )
|
else if( (l& pjetpack) && ps[g_p].jetpack_on )
|
||||||
j = 1;
|
j = 1;
|
||||||
|
@ -2431,9 +2431,9 @@ int ParseState::parse(void)
|
||||||
j = 1;
|
j = 1;
|
||||||
else if( (l& ponground) && ps[g_p].on_ground)
|
else if( (l& ponground) && ps[g_p].on_ground)
|
||||||
j = 1;
|
j = 1;
|
||||||
else if( (l& palive) && ps[g_p].GetActor()->s.xrepeat > (isRR() ? 8 : 32) && ps[g_p].GetActor()->s.extra > 0 && ps[g_p].timebeforeexit == 0 )
|
else if( (l& palive) && ps[g_p].GetActor()->s->xrepeat > (isRR() ? 8 : 32) && ps[g_p].GetActor()->s->extra > 0 && ps[g_p].timebeforeexit == 0 )
|
||||||
j = 1;
|
j = 1;
|
||||||
else if( (l& pdead) && ps[g_p].GetActor()->s.extra <= 0)
|
else if( (l& pdead) && ps[g_p].GetActor()->s->extra <= 0)
|
||||||
j = 1;
|
j = 1;
|
||||||
else if( (l& pfacing) )
|
else if( (l& pfacing) )
|
||||||
{
|
{
|
||||||
|
@ -2509,7 +2509,7 @@ int ParseState::parse(void)
|
||||||
DDukeActor* a2;
|
DDukeActor* a2;
|
||||||
while ((a2 = it.Next()))
|
while ((a2 = it.Next()))
|
||||||
{
|
{
|
||||||
auto sj = &a2->s;
|
auto sj = a2->s;
|
||||||
if (sj->picnum == ACTIVATOR)
|
if (sj->picnum == ACTIVATOR)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -2542,7 +2542,7 @@ int ParseState::parse(void)
|
||||||
case concmd_ifrespawn:
|
case concmd_ifrespawn:
|
||||||
if( badguy(g_ac) )
|
if( badguy(g_ac) )
|
||||||
parseifelse( ud.respawn_monsters );
|
parseifelse( ud.respawn_monsters );
|
||||||
else if( inventory(&g_ac->s) )
|
else if( inventory(g_ac->s) )
|
||||||
parseifelse( ud.respawn_inventory );
|
parseifelse( ud.respawn_inventory );
|
||||||
else
|
else
|
||||||
parseifelse( ud.respawn_items );
|
parseifelse( ud.respawn_items );
|
||||||
|
@ -2726,7 +2726,7 @@ int ParseState::parse(void)
|
||||||
}
|
}
|
||||||
case concmd_ifphealthl:
|
case concmd_ifphealthl:
|
||||||
insptr++;
|
insptr++;
|
||||||
parseifelse( ps[g_p].GetActor()->s.extra < *insptr);
|
parseifelse( ps[g_p].GetActor()->s->extra < *insptr);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case concmd_ifpinventory:
|
case concmd_ifpinventory:
|
||||||
|
@ -2777,8 +2777,8 @@ int ParseState::parse(void)
|
||||||
}
|
}
|
||||||
case concmd_pstomp:
|
case concmd_pstomp:
|
||||||
insptr++;
|
insptr++;
|
||||||
if( ps[g_p].knee_incs == 0 && ps[g_p].GetActor()->s.xrepeat >= (isRR()? 9: 40) )
|
if( ps[g_p].knee_incs == 0 && ps[g_p].GetActor()->s->xrepeat >= (isRR()? 9: 40) )
|
||||||
if( cansee(g_sp->x,g_sp->y,g_sp->z-(4<<8),g_sp->sectnum,ps[g_p].posx,ps[g_p].posy,ps[g_p].posz+(16<<8),ps[g_p].GetActor()->s.sectnum) )
|
if( cansee(g_sp->x,g_sp->y,g_sp->z-(4<<8),g_sp->sectnum,ps[g_p].posx,ps[g_p].posy,ps[g_p].posz+(16<<8),ps[g_p].GetActor()->s->sectnum) )
|
||||||
{
|
{
|
||||||
ps[g_p].knee_incs = 1;
|
ps[g_p].knee_incs = 1;
|
||||||
if(ps[g_p].weapon_pos == 0)
|
if(ps[g_p].weapon_pos == 0)
|
||||||
|
@ -2929,7 +2929,7 @@ int ParseState::parse(void)
|
||||||
DukeStatIterator it(STAT_ACTOR);
|
DukeStatIterator it(STAT_ACTOR);
|
||||||
while (auto j = it.Next())
|
while (auto j = it.Next())
|
||||||
{
|
{
|
||||||
if (j->s.picnum == lType)
|
if (j->s->picnum == lType)
|
||||||
{
|
{
|
||||||
lTemp = ldist(g_ac, j);
|
lTemp = ldist(g_ac, j);
|
||||||
if (lTemp < lMaxDist)
|
if (lTemp < lMaxDist)
|
||||||
|
@ -2972,7 +2972,7 @@ int ParseState::parse(void)
|
||||||
DukeStatIterator it(STAT_ACTOR);
|
DukeStatIterator it(STAT_ACTOR);
|
||||||
while (auto j = it.Next())
|
while (auto j = it.Next())
|
||||||
{
|
{
|
||||||
if (j->s.picnum == lType)
|
if (j->s->picnum == lType)
|
||||||
{
|
{
|
||||||
lTemp = ldist(g_ac, j);
|
lTemp = ldist(g_ac, j);
|
||||||
if (lTemp < lMaxDist)
|
if (lTemp < lMaxDist)
|
||||||
|
@ -3660,14 +3660,14 @@ void LoadActor(DDukeActor *actor, int p, int x)
|
||||||
s.g_ac = actor;
|
s.g_ac = actor;
|
||||||
s.g_t = &s.g_ac->temp_data[0]; // Sprite's 'extra' data
|
s.g_t = &s.g_ac->temp_data[0]; // Sprite's 'extra' data
|
||||||
|
|
||||||
auto addr = gs.tileinfo[actor->s.picnum].loadeventscriptptr;
|
auto addr = gs.tileinfo[actor->s->picnum].loadeventscriptptr;
|
||||||
if (addr == 0) return;
|
if (addr == 0) return;
|
||||||
|
|
||||||
int *insptr = &ScriptCode[addr + 1];
|
int *insptr = &ScriptCode[addr + 1];
|
||||||
|
|
||||||
s.killit_flag = 0;
|
s.killit_flag = 0;
|
||||||
|
|
||||||
if (actor->s.sectnum < 0 || actor->s.sectnum >= MAXSECTORS)
|
if (actor->s->sectnum < 0 || actor->s->sectnum >= MAXSECTORS)
|
||||||
{
|
{
|
||||||
deletesprite(actor);
|
deletesprite(actor);
|
||||||
return;
|
return;
|
||||||
|
@ -3690,14 +3690,14 @@ void LoadActor(DDukeActor *actor, int p, int x)
|
||||||
{
|
{
|
||||||
fi.move(actor, p, x);
|
fi.move(actor, p, x);
|
||||||
|
|
||||||
if (actor->s.statnum == STAT_ACTOR)
|
if (actor->s->statnum == STAT_ACTOR)
|
||||||
{
|
{
|
||||||
if (badguy(actor))
|
if (badguy(actor))
|
||||||
{
|
{
|
||||||
if (actor->s.xrepeat > 60) return;
|
if (actor->s->xrepeat > 60) return;
|
||||||
if (ud.respawn_monsters == 1 && actor->s.extra <= 0) return;
|
if (ud.respawn_monsters == 1 && actor->s->extra <= 0) return;
|
||||||
}
|
}
|
||||||
else if (ud.respawn_items == 1 && (actor->s.cstat & 32768)) return;
|
else if (ud.respawn_items == 1 && (actor->s->cstat & 32768)) return;
|
||||||
|
|
||||||
if (actor->timetosleep > 1)
|
if (actor->timetosleep > 1)
|
||||||
actor->timetosleep--;
|
actor->timetosleep--;
|
||||||
|
@ -3705,7 +3705,7 @@ void LoadActor(DDukeActor *actor, int p, int x)
|
||||||
changespritestat(actor, STAT_ZOMBIEACTOR);
|
changespritestat(actor, STAT_ZOMBIEACTOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (actor->s.statnum == 6)
|
else if (actor->s->statnum == 6)
|
||||||
{
|
{
|
||||||
#if 0
|
#if 0
|
||||||
switch (actor->s.picnum)
|
switch (actor->s.picnum)
|
||||||
|
@ -3741,7 +3741,7 @@ void LoadActor(DDukeActor *actor, int p, int x)
|
||||||
|
|
||||||
void execute(DDukeActor *actor,int p,int x)
|
void execute(DDukeActor *actor,int p,int x)
|
||||||
{
|
{
|
||||||
if (gs.actorinfo[actor->s.picnum].scriptaddress == 0) return;
|
if (gs.actorinfo[actor->s->picnum].scriptaddress == 0) return;
|
||||||
|
|
||||||
int done;
|
int done;
|
||||||
|
|
||||||
|
@ -3751,12 +3751,12 @@ void execute(DDukeActor *actor,int p,int x)
|
||||||
s.g_ac = actor;
|
s.g_ac = actor;
|
||||||
s.g_t = &actor->temp_data[0]; // Sprite's 'extra' data
|
s.g_t = &actor->temp_data[0]; // Sprite's 'extra' data
|
||||||
|
|
||||||
if (gs.actorinfo[actor->s.picnum].scriptaddress == 0) return;
|
if (gs.actorinfo[actor->s->picnum].scriptaddress == 0) return;
|
||||||
s.insptr = &ScriptCode[4 + (gs.actorinfo[actor->s.picnum].scriptaddress)];
|
s.insptr = &ScriptCode[4 + (gs.actorinfo[actor->s->picnum].scriptaddress)];
|
||||||
|
|
||||||
s.killit_flag = 0;
|
s.killit_flag = 0;
|
||||||
|
|
||||||
if(actor->s.sectnum < 0 || actor->s.sectnum >= MAXSECTORS)
|
if(actor->s->sectnum < 0 || actor->s->sectnum >= MAXSECTORS)
|
||||||
{
|
{
|
||||||
if(badguy(actor))
|
if(badguy(actor))
|
||||||
ps[p].actors_killed++;
|
ps[p].actors_killed++;
|
||||||
|
@ -3772,11 +3772,11 @@ void execute(DDukeActor *actor,int p,int x)
|
||||||
int increment = ptr[3];
|
int increment = ptr[3];
|
||||||
int delay = ptr[4];
|
int delay = ptr[4];
|
||||||
|
|
||||||
actor->s.lotag += TICSPERFRAME;
|
actor->s->lotag += TICSPERFRAME;
|
||||||
if (actor->s.lotag > delay)
|
if (actor->s->lotag > delay)
|
||||||
{
|
{
|
||||||
s.g_t[2]++;
|
s.g_t[2]++;
|
||||||
actor->s.lotag = 0;
|
actor->s->lotag = 0;
|
||||||
s.g_t[3] += increment;
|
s.g_t[3] += increment;
|
||||||
}
|
}
|
||||||
if (abs(s.g_t[3]) >= abs(numframes * increment))
|
if (abs(s.g_t[3]) >= abs(numframes * increment))
|
||||||
|
@ -3798,14 +3798,14 @@ void execute(DDukeActor *actor,int p,int x)
|
||||||
{
|
{
|
||||||
fi.move(actor, p, x);
|
fi.move(actor, p, x);
|
||||||
|
|
||||||
if (actor->s.statnum == STAT_ACTOR)
|
if (actor->s->statnum == STAT_ACTOR)
|
||||||
{
|
{
|
||||||
if (badguy(actor))
|
if (badguy(actor))
|
||||||
{
|
{
|
||||||
if (actor->s.xrepeat > 60) goto quit;
|
if (actor->s->xrepeat > 60) goto quit;
|
||||||
if (ud.respawn_monsters == 1 && actor->s.extra <= 0) goto quit;
|
if (ud.respawn_monsters == 1 && actor->s->extra <= 0) goto quit;
|
||||||
}
|
}
|
||||||
else if (ud.respawn_items == 1 && (actor->s.cstat & 32768)) goto quit;
|
else if (ud.respawn_items == 1 && (actor->s->cstat & 32768)) goto quit;
|
||||||
|
|
||||||
if (actor->timetosleep > 1)
|
if (actor->timetosleep > 1)
|
||||||
actor->timetosleep--;
|
actor->timetosleep--;
|
||||||
|
@ -3813,7 +3813,7 @@ void execute(DDukeActor *actor,int p,int x)
|
||||||
changespritestat(actor, STAT_ZOMBIEACTOR);
|
changespritestat(actor, STAT_ZOMBIEACTOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (actor->s.statnum == STAT_STANDABLE)
|
else if (actor->s->statnum == STAT_STANDABLE)
|
||||||
fi.checktimetosleep(actor);
|
fi.checktimetosleep(actor);
|
||||||
}
|
}
|
||||||
quit:
|
quit:
|
||||||
|
|
|
@ -106,7 +106,7 @@ int animatefist(int gs, int snum, double look_anghalf)
|
||||||
fistzoom = 40290;
|
fistzoom = 40290;
|
||||||
fistz = 194 + bsinf((6 + fisti) << 7, -9);
|
fistz = 194 + bsinf((6 + fisti) << 7, -9);
|
||||||
|
|
||||||
if (ps[snum].GetActor()->s.pal == 1)
|
if (ps[snum].GetActor()->s->pal == 1)
|
||||||
fistpal = 1;
|
fistpal = 1;
|
||||||
else
|
else
|
||||||
fistpal = sector[ps[snum].cursectnum].floorpal;
|
fistpal = sector[ps[snum].cursectnum].floorpal;
|
||||||
|
@ -131,13 +131,13 @@ int animateknee(int gs, int snum, double hard_landing, double look_anghalf, doub
|
||||||
short pal;
|
short pal;
|
||||||
double looking_arc;
|
double looking_arc;
|
||||||
|
|
||||||
if (ps[snum].knee_incs > 11 || ps[snum].knee_incs == 0 || ps[snum].GetActor()->s.extra <= 0) return 0;
|
if (ps[snum].knee_incs > 11 || ps[snum].knee_incs == 0 || ps[snum].GetActor()->s->extra <= 0) return 0;
|
||||||
|
|
||||||
looking_arc = knee_y[ps[snum].knee_incs] + (fabs(look_anghalf) / 4.5);
|
looking_arc = knee_y[ps[snum].knee_incs] + (fabs(look_anghalf) / 4.5);
|
||||||
|
|
||||||
looking_arc -= hard_landing * 8.;
|
looking_arc -= hard_landing * 8.;
|
||||||
|
|
||||||
if (ps[snum].GetActor()->s.pal == 1)
|
if (ps[snum].GetActor()->s->pal == 1)
|
||||||
pal = 1;
|
pal = 1;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -163,13 +163,13 @@ int animateknuckles(int gs, int snum, double hard_landing, double look_anghalf,
|
||||||
short pal;
|
short pal;
|
||||||
double looking_arc;
|
double looking_arc;
|
||||||
|
|
||||||
if (isWW2GI() || ps[snum].over_shoulder_on != 0 || ps[snum].knuckle_incs == 0 || ps[snum].GetActor()->s.extra <= 0) return 0;
|
if (isWW2GI() || ps[snum].over_shoulder_on != 0 || ps[snum].knuckle_incs == 0 || ps[snum].GetActor()->s->extra <= 0) return 0;
|
||||||
|
|
||||||
looking_arc = fabs(look_anghalf) / 4.5;
|
looking_arc = fabs(look_anghalf) / 4.5;
|
||||||
|
|
||||||
looking_arc -= hard_landing * 8.;
|
looking_arc -= hard_landing * 8.;
|
||||||
|
|
||||||
if (ps[snum].GetActor()->s.pal == 1)
|
if (ps[snum].GetActor()->s->pal == 1)
|
||||||
pal = 1;
|
pal = 1;
|
||||||
else
|
else
|
||||||
pal = sector[ps[snum].cursectnum].floorpal;
|
pal = sector[ps[snum].cursectnum].floorpal;
|
||||||
|
@ -190,7 +190,7 @@ void displaymasks_d(int snum, double)
|
||||||
{
|
{
|
||||||
int p;
|
int p;
|
||||||
|
|
||||||
if (ps[snum].GetActor()->s.pal == 1)
|
if (ps[snum].GetActor()->s->pal == 1)
|
||||||
p = 1;
|
p = 1;
|
||||||
else
|
else
|
||||||
p = sector[ps[snum].cursectnum].floorpal;
|
p = sector[ps[snum].cursectnum].floorpal;
|
||||||
|
@ -220,7 +220,7 @@ static int animatetip(int gs, int snum, double hard_landing, double look_anghalf
|
||||||
looking_arc = fabs(look_anghalf) / 4.5;
|
looking_arc = fabs(look_anghalf) / 4.5;
|
||||||
looking_arc -= hard_landing * 8.;
|
looking_arc -= hard_landing * 8.;
|
||||||
|
|
||||||
if (ps[snum].GetActor()->s.pal == 1)
|
if (ps[snum].GetActor()->s->pal == 1)
|
||||||
p = 1;
|
p = 1;
|
||||||
else
|
else
|
||||||
p = sector[ps[snum].cursectnum].floorpal;
|
p = sector[ps[snum].cursectnum].floorpal;
|
||||||
|
@ -243,13 +243,13 @@ int animateaccess(int gs,int snum,double hard_landing,double look_anghalf,double
|
||||||
double looking_arc;
|
double looking_arc;
|
||||||
char p;
|
char p;
|
||||||
|
|
||||||
if(ps[snum].access_incs == 0 || ps[snum].GetActor()->s.extra <= 0) return 0;
|
if(ps[snum].access_incs == 0 || ps[snum].GetActor()->s->extra <= 0) return 0;
|
||||||
|
|
||||||
looking_arc = access_y[ps[snum].access_incs] + (fabs(look_anghalf) / 4.5);
|
looking_arc = access_y[ps[snum].access_incs] + (fabs(look_anghalf) / 4.5);
|
||||||
looking_arc -= hard_landing * 8.;
|
looking_arc -= hard_landing * 8.;
|
||||||
|
|
||||||
if(ps[snum].access_spritenum != nullptr)
|
if(ps[snum].access_spritenum != nullptr)
|
||||||
p = ps[snum].access_spritenum->s.pal;
|
p = ps[snum].access_spritenum->s->pal;
|
||||||
else p = 0;
|
else p = 0;
|
||||||
|
|
||||||
if((ps[snum].access_incs-3) > 0 && (ps[snum].access_incs-3)>>3)
|
if((ps[snum].access_incs-3) > 0 && (ps[snum].access_incs-3)>>3)
|
||||||
|
@ -289,10 +289,10 @@ void displayweapon_d(int snum, double smoothratio)
|
||||||
random_club_frame = p->orandom_club_frame + MulScaleF(p->random_club_frame - p->orandom_club_frame, smoothratio, 16);
|
random_club_frame = p->orandom_club_frame + MulScaleF(p->random_club_frame - p->orandom_club_frame, smoothratio, 16);
|
||||||
hard_landing = p->ohard_landing + MulScaleF(p->hard_landing - p->ohard_landing, smoothratio, 16);
|
hard_landing = p->ohard_landing + MulScaleF(p->hard_landing - p->ohard_landing, smoothratio, 16);
|
||||||
|
|
||||||
shade = p->GetActor()->s.shade;
|
shade = p->GetActor()->s->shade;
|
||||||
if(shade > 24) shade = 24;
|
if(shade > 24) shade = 24;
|
||||||
|
|
||||||
bool playerVars = p->newOwner != nullptr || 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(shade,snum,look_anghalf) || animateknuckles(shade,snum,hard_landing,look_anghalf,horiz16th) ||
|
bool playerAnims = animatefist(shade,snum,look_anghalf) || animateknuckles(shade,snum,hard_landing,look_anghalf,horiz16th) ||
|
||||||
animatetip(shade,snum,hard_landing,look_anghalf,horiz16th) || animateaccess(shade,snum,hard_landing,look_anghalf,horiz16th);
|
animatetip(shade,snum,hard_landing,look_anghalf,horiz16th) || animateaccess(shade,snum,hard_landing,look_anghalf,horiz16th);
|
||||||
|
|
||||||
|
@ -308,7 +308,7 @@ void displayweapon_d(int snum, double smoothratio)
|
||||||
weapon_xoffset = (160)-90;
|
weapon_xoffset = (160)-90;
|
||||||
weapon_xoffset -= bcosf(weapon_sway * 0.5) * (1. / 1536.);
|
weapon_xoffset -= bcosf(weapon_sway * 0.5) * (1. / 1536.);
|
||||||
weapon_xoffset -= 58 + p->weapon_ang;
|
weapon_xoffset -= 58 + p->weapon_ang;
|
||||||
if( p->GetActor()->s.xrepeat < 32 )
|
if( p->GetActor()->s->xrepeat < 32 )
|
||||||
gun_pos -= fabs(bsinf(weapon_sway * 4., -9));
|
gun_pos -= fabs(bsinf(weapon_sway * 4., -9));
|
||||||
else gun_pos -= fabs(bsinf(weapon_sway * 0.5, -10));
|
else gun_pos -= fabs(bsinf(weapon_sway * 0.5, -10));
|
||||||
|
|
||||||
|
@ -339,7 +339,7 @@ void displayweapon_d(int snum, double smoothratio)
|
||||||
j = 14-p->quick_kick;
|
j = 14-p->quick_kick;
|
||||||
if (j != 14 || p->last_quick_kick)
|
if (j != 14 || p->last_quick_kick)
|
||||||
{
|
{
|
||||||
if (p->GetActor()->s.pal == 1)
|
if (p->GetActor()->s->pal == 1)
|
||||||
pal = 1;
|
pal = 1;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -359,13 +359,13 @@ void displayweapon_d(int snum, double smoothratio)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p->GetActor()->s.xrepeat < 40)
|
if (p->GetActor()->s->xrepeat < 40)
|
||||||
{
|
{
|
||||||
static int fistsign;
|
static int fistsign;
|
||||||
//shrunken..
|
//shrunken..
|
||||||
if (p->jetpack_on == 0)
|
if (p->jetpack_on == 0)
|
||||||
{
|
{
|
||||||
i = p->GetActor()->s.xvel;
|
i = p->GetActor()->s->xvel;
|
||||||
looking_arc += 32 - (i >> 1);
|
looking_arc += 32 - (i >> 1);
|
||||||
fistsign += i >> 1;
|
fistsign += i >> 1;
|
||||||
}
|
}
|
||||||
|
@ -393,7 +393,7 @@ void displayweapon_d(int snum, double smoothratio)
|
||||||
{
|
{
|
||||||
if (*kb > 0)
|
if (*kb > 0)
|
||||||
{
|
{
|
||||||
if (p->GetActor()->s.pal == 1)
|
if (p->GetActor()->s->pal == 1)
|
||||||
pal = 1;
|
pal = 1;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -424,7 +424,7 @@ void displayweapon_d(int snum, double smoothratio)
|
||||||
auto displaytripbomb = [&]()
|
auto displaytripbomb = [&]()
|
||||||
{
|
{
|
||||||
|
|
||||||
if (p->GetActor()->s.pal == 1)
|
if (p->GetActor()->s->pal == 1)
|
||||||
pal = 1;
|
pal = 1;
|
||||||
else
|
else
|
||||||
pal = sector[p->cursectnum].floorpal;
|
pal = sector[p->cursectnum].floorpal;
|
||||||
|
@ -457,7 +457,7 @@ void displayweapon_d(int snum, double smoothratio)
|
||||||
pin = ((gs.displayflags & DUKE3D_NO_WIDESCREEN_PINNING)) ? 0 : RS_ALIGN_R;
|
pin = ((gs.displayflags & DUKE3D_NO_WIDESCREEN_PINNING)) ? 0 : RS_ALIGN_R;
|
||||||
auto rpgpic = RPGGUN;
|
auto rpgpic = RPGGUN;
|
||||||
|
|
||||||
if (p->GetActor()->s.pal == 1)
|
if (p->GetActor()->s->pal == 1)
|
||||||
pal = 1;
|
pal = 1;
|
||||||
else pal = sector[p->cursectnum].floorpal;
|
else pal = sector[p->cursectnum].floorpal;
|
||||||
|
|
||||||
|
@ -505,7 +505,7 @@ void displayweapon_d(int snum, double smoothratio)
|
||||||
|
|
||||||
auto displayshotgun_ww = [&]()
|
auto displayshotgun_ww = [&]()
|
||||||
{
|
{
|
||||||
if (p->GetActor()->s.pal == 1)
|
if (p->GetActor()->s->pal == 1)
|
||||||
pal = 1;
|
pal = 1;
|
||||||
else
|
else
|
||||||
pal = sector[p->cursectnum].floorpal;
|
pal = sector[p->cursectnum].floorpal;
|
||||||
|
@ -516,7 +516,7 @@ void displayweapon_d(int snum, double smoothratio)
|
||||||
gun_pos -= bsinf(kickback_pic * 128., -12);
|
gun_pos -= bsinf(kickback_pic * 128., -12);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*kb > 0 && p->GetActor()->s.pal != 1)
|
if (*kb > 0 && p->GetActor()->s->pal != 1)
|
||||||
{
|
{
|
||||||
weapon_xoffset += 1 - (rand() & 3);
|
weapon_xoffset += 1 - (rand() & 3);
|
||||||
}
|
}
|
||||||
|
@ -563,7 +563,7 @@ void displayweapon_d(int snum, double smoothratio)
|
||||||
|
|
||||||
auto displayshotgun = [&]()
|
auto displayshotgun = [&]()
|
||||||
{
|
{
|
||||||
if (p->GetActor()->s.pal == 1)
|
if (p->GetActor()->s->pal == 1)
|
||||||
pal = 1;
|
pal = 1;
|
||||||
else
|
else
|
||||||
pal = sector[p->cursectnum].floorpal;
|
pal = sector[p->cursectnum].floorpal;
|
||||||
|
@ -639,7 +639,7 @@ void displayweapon_d(int snum, double smoothratio)
|
||||||
|
|
||||||
auto displaychaingun_ww = [&]()
|
auto displaychaingun_ww = [&]()
|
||||||
{
|
{
|
||||||
if (p->GetActor()->s.pal == 1)
|
if (p->GetActor()->s->pal == 1)
|
||||||
pal = 1;
|
pal = 1;
|
||||||
else
|
else
|
||||||
pal = sector[p->cursectnum].floorpal;
|
pal = sector[p->cursectnum].floorpal;
|
||||||
|
@ -647,7 +647,7 @@ void displayweapon_d(int snum, double smoothratio)
|
||||||
if (*kb > 0)
|
if (*kb > 0)
|
||||||
gun_pos -= bsinf(kickback_pic * 128., -12);
|
gun_pos -= bsinf(kickback_pic * 128., -12);
|
||||||
|
|
||||||
if (*kb > 0 && p->GetActor()->s.pal != 1) weapon_xoffset += 1 - (rand() & 3);
|
if (*kb > 0 && p->GetActor()->s->pal != 1) weapon_xoffset += 1 - (rand() & 3);
|
||||||
|
|
||||||
if (*kb == 0)
|
if (*kb == 0)
|
||||||
{
|
{
|
||||||
|
@ -745,7 +745,7 @@ void displayweapon_d(int snum, double smoothratio)
|
||||||
|
|
||||||
auto displaychaingun = [&]
|
auto displaychaingun = [&]
|
||||||
{
|
{
|
||||||
if (p->GetActor()->s.pal == 1)
|
if (p->GetActor()->s->pal == 1)
|
||||||
pal = 1;
|
pal = 1;
|
||||||
else
|
else
|
||||||
pal = sector[p->cursectnum].floorpal;
|
pal = sector[p->cursectnum].floorpal;
|
||||||
|
@ -753,7 +753,7 @@ void displayweapon_d(int snum, double smoothratio)
|
||||||
if (*kb > 0)
|
if (*kb > 0)
|
||||||
gun_pos -= bsinf(kickback_pic * 128., -12);
|
gun_pos -= bsinf(kickback_pic * 128., -12);
|
||||||
|
|
||||||
if (*kb > 0 && p->GetActor()->s.pal != 1) weapon_xoffset += 1 - (rand() & 3);
|
if (*kb > 0 && p->GetActor()->s->pal != 1) weapon_xoffset += 1 - (rand() & 3);
|
||||||
|
|
||||||
hud_drawpal(weapon_xoffset + 168 - look_anghalf, looking_arc + 260 - gun_pos, CHAINGUN, shade, o, pal);
|
hud_drawpal(weapon_xoffset + 168 - look_anghalf, looking_arc + 260 - gun_pos, CHAINGUN, shade, o, pal);
|
||||||
switch(*kb)
|
switch(*kb)
|
||||||
|
@ -765,9 +765,9 @@ void displayweapon_d(int snum, double smoothratio)
|
||||||
if (*kb > 4 && *kb < 12)
|
if (*kb > 4 && *kb < 12)
|
||||||
{
|
{
|
||||||
i = 0;
|
i = 0;
|
||||||
if (p->GetActor()->s.pal != 1) i = rand() & 7;
|
if (p->GetActor()->s->pal != 1) i = rand() & 7;
|
||||||
hud_drawpal(i + weapon_xoffset - 4 + 140 - look_anghalf,i + looking_arc - (kickback_pic / 2.) + 208 - gun_pos, CHAINGUN + 5 + ((*kb - 4) / 5),shade,o,pal);
|
hud_drawpal(i + weapon_xoffset - 4 + 140 - look_anghalf,i + looking_arc - (kickback_pic / 2.) + 208 - gun_pos, CHAINGUN + 5 + ((*kb - 4) / 5),shade,o,pal);
|
||||||
if (p->GetActor()->s.pal != 1) i = rand() & 7;
|
if (p->GetActor()->s->pal != 1) i = rand() & 7;
|
||||||
hud_drawpal(i + weapon_xoffset - 4 + 184 - look_anghalf,i + looking_arc - (kickback_pic / 2.) + 208 - gun_pos, CHAINGUN + 5 + ((*kb - 4) / 5),shade,o,pal);
|
hud_drawpal(i + weapon_xoffset - 4 + 184 - look_anghalf,i + looking_arc - (kickback_pic / 2.) + 208 - gun_pos, CHAINGUN + 5 + ((*kb - 4) / 5),shade,o,pal);
|
||||||
}
|
}
|
||||||
if (*kb < 8)
|
if (*kb < 8)
|
||||||
|
@ -789,7 +789,7 @@ void displayweapon_d(int snum, double smoothratio)
|
||||||
|
|
||||||
auto displaypistol = [&]()
|
auto displaypistol = [&]()
|
||||||
{
|
{
|
||||||
if (p->GetActor()->s.pal == 1)
|
if (p->GetActor()->s->pal == 1)
|
||||||
pal = 1;
|
pal = 1;
|
||||||
else
|
else
|
||||||
pal = sector[p->cursectnum].floorpal;
|
pal = sector[p->cursectnum].floorpal;
|
||||||
|
@ -852,7 +852,7 @@ void displayweapon_d(int snum, double smoothratio)
|
||||||
|
|
||||||
auto displayhandbomb = [&]()
|
auto displayhandbomb = [&]()
|
||||||
{
|
{
|
||||||
if (p->GetActor()->s.pal == 1)
|
if (p->GetActor()->s->pal == 1)
|
||||||
pal = 1;
|
pal = 1;
|
||||||
else
|
else
|
||||||
pal = sector[p->cursectnum].floorpal;
|
pal = sector[p->cursectnum].floorpal;
|
||||||
|
@ -912,7 +912,7 @@ void displayweapon_d(int snum, double smoothratio)
|
||||||
auto displayhandremote = [&]()
|
auto displayhandremote = [&]()
|
||||||
{
|
{
|
||||||
signed char remote_frames[] = { 0,1,1,2,1,1,0,0,0,0,0 };
|
signed char remote_frames[] = { 0,1,1,2,1,1,0,0,0,0,0 };
|
||||||
if (p->GetActor()->s.pal == 1)
|
if (p->GetActor()->s->pal == 1)
|
||||||
pal = 1;
|
pal = 1;
|
||||||
else
|
else
|
||||||
pal = sector[p->cursectnum].floorpal;
|
pal = sector[p->cursectnum].floorpal;
|
||||||
|
@ -933,7 +933,7 @@ void displayweapon_d(int snum, double smoothratio)
|
||||||
|
|
||||||
auto displaydevastator_ww = [&]
|
auto displaydevastator_ww = [&]
|
||||||
{
|
{
|
||||||
if (p->GetActor()->s.pal == 1)
|
if (p->GetActor()->s->pal == 1)
|
||||||
pal = 1;
|
pal = 1;
|
||||||
else
|
else
|
||||||
pal = sector[p->cursectnum].floorpal;
|
pal = sector[p->cursectnum].floorpal;
|
||||||
|
@ -994,7 +994,7 @@ void displayweapon_d(int snum, double smoothratio)
|
||||||
|
|
||||||
auto displaydevastator = [&]
|
auto displaydevastator = [&]
|
||||||
{
|
{
|
||||||
if (p->GetActor()->s.pal == 1)
|
if (p->GetActor()->s->pal == 1)
|
||||||
pal = 1;
|
pal = 1;
|
||||||
else
|
else
|
||||||
pal = sector[p->cursectnum].floorpal;
|
pal = sector[p->cursectnum].floorpal;
|
||||||
|
@ -1034,7 +1034,7 @@ void displayweapon_d(int snum, double smoothratio)
|
||||||
pin = (isWW2GI() || (gs.displayflags & DUKE3D_NO_WIDESCREEN_PINNING)) ? 0 : RS_ALIGN_R;
|
pin = (isWW2GI() || (gs.displayflags & DUKE3D_NO_WIDESCREEN_PINNING)) ? 0 : RS_ALIGN_R;
|
||||||
auto pic = FREEZE;
|
auto pic = FREEZE;
|
||||||
|
|
||||||
if (p->GetActor()->s.pal == 1)
|
if (p->GetActor()->s->pal == 1)
|
||||||
pal = 1;
|
pal = 1;
|
||||||
else
|
else
|
||||||
pal = sector[p->cursectnum].floorpal;
|
pal = sector[p->cursectnum].floorpal;
|
||||||
|
@ -1043,7 +1043,7 @@ void displayweapon_d(int snum, double smoothratio)
|
||||||
{
|
{
|
||||||
char cat_frames[] = { 0,0,1,1,2,2 };
|
char cat_frames[] = { 0,0,1,1,2,2 };
|
||||||
|
|
||||||
if (p->GetActor()->s.pal != 1)
|
if (p->GetActor()->s->pal != 1)
|
||||||
{
|
{
|
||||||
weapon_xoffset += rand() & 3;
|
weapon_xoffset += rand() & 3;
|
||||||
looking_arc += rand() & 3;
|
looking_arc += rand() & 3;
|
||||||
|
@ -1065,7 +1065,7 @@ void displayweapon_d(int snum, double smoothratio)
|
||||||
{
|
{
|
||||||
weapon_xoffset += 28;
|
weapon_xoffset += 28;
|
||||||
looking_arc += 18;
|
looking_arc += 18;
|
||||||
if (p->GetActor()->s.pal == 1)
|
if (p->GetActor()->s->pal == 1)
|
||||||
pal = 1;
|
pal = 1;
|
||||||
else
|
else
|
||||||
pal = sector[p->cursectnum].floorpal;
|
pal = sector[p->cursectnum].floorpal;
|
||||||
|
@ -1096,7 +1096,7 @@ void displayweapon_d(int snum, double smoothratio)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// the 'active' display.
|
// the 'active' display.
|
||||||
if (p->GetActor()->s.pal != 1)
|
if (p->GetActor()->s->pal != 1)
|
||||||
{
|
{
|
||||||
weapon_xoffset += rand() & 3;
|
weapon_xoffset += rand() & 3;
|
||||||
gun_pos += (rand() & 3);
|
gun_pos += (rand() & 3);
|
||||||
|
@ -1158,7 +1158,7 @@ void displayweapon_d(int snum, double smoothratio)
|
||||||
{
|
{
|
||||||
weapon_xoffset += 28;
|
weapon_xoffset += 28;
|
||||||
looking_arc += 18;
|
looking_arc += 18;
|
||||||
if (p->GetActor()->s.pal == 1)
|
if (p->GetActor()->s->pal == 1)
|
||||||
pal = 1;
|
pal = 1;
|
||||||
else
|
else
|
||||||
pal = sector[p->cursectnum].floorpal;
|
pal = sector[p->cursectnum].floorpal;
|
||||||
|
@ -1171,7 +1171,7 @@ void displayweapon_d(int snum, double smoothratio)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (p->GetActor()->s.pal != 1)
|
if (p->GetActor()->s->pal != 1)
|
||||||
{
|
{
|
||||||
weapon_xoffset += rand() & 3;
|
weapon_xoffset += rand() & 3;
|
||||||
gun_pos += (rand() & 3);
|
gun_pos += (rand() & 3);
|
||||||
|
@ -1234,7 +1234,7 @@ void displayweapon_d(int snum, double smoothratio)
|
||||||
auto shrinker = /*isWorldTour() ? SHRINKERWIDE :*/ SHRINKER;
|
auto shrinker = /*isWorldTour() ? SHRINKERWIDE :*/ SHRINKER;
|
||||||
weapon_xoffset += 28;
|
weapon_xoffset += 28;
|
||||||
looking_arc += 18;
|
looking_arc += 18;
|
||||||
if (p->GetActor()->s.pal == 1)
|
if (p->GetActor()->s->pal == 1)
|
||||||
pal = 1;
|
pal = 1;
|
||||||
else
|
else
|
||||||
pal = sector[p->cursectnum].floorpal;
|
pal = sector[p->cursectnum].floorpal;
|
||||||
|
@ -1263,7 +1263,7 @@ void displayweapon_d(int snum, double smoothratio)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (p->GetActor()->s.pal != 1)
|
if (p->GetActor()->s->pal != 1)
|
||||||
{
|
{
|
||||||
weapon_xoffset += rand() & 3;
|
weapon_xoffset += rand() & 3;
|
||||||
gun_pos += (rand() & 3);
|
gun_pos += (rand() & 3);
|
||||||
|
@ -1299,7 +1299,7 @@ void displayweapon_d(int snum, double smoothratio)
|
||||||
|
|
||||||
auto displayflamethrower = [&]()
|
auto displayflamethrower = [&]()
|
||||||
{
|
{
|
||||||
if (p->GetActor()->s.pal == 1)
|
if (p->GetActor()->s->pal == 1)
|
||||||
pal = 1;
|
pal = 1;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1317,7 +1317,7 @@ void displayweapon_d(int snum, double smoothratio)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
static const uint8_t cat_frames[] = { 0, 0, 1, 1, 2, 2 };
|
static const uint8_t cat_frames[] = { 0, 0, 1, 1, 2, 2 };
|
||||||
if (p->GetActor()->s.pal != 1)
|
if (p->GetActor()->s->pal != 1)
|
||||||
{
|
{
|
||||||
weapon_xoffset += krand() & 1;
|
weapon_xoffset += krand() & 1;
|
||||||
looking_arc += krand() & 1;
|
looking_arc += krand() & 1;
|
||||||
|
|
|
@ -69,7 +69,7 @@ void displaymasks_r(int snum, double smoothratio)
|
||||||
{
|
{
|
||||||
short p;
|
short p;
|
||||||
|
|
||||||
if (ps[snum].GetActor()->s.pal == 1)
|
if (ps[snum].GetActor()->s->pal == 1)
|
||||||
p = 1;
|
p = 1;
|
||||||
else
|
else
|
||||||
p = sector[ps[snum].cursectnum].floorpal;
|
p = sector[ps[snum].cursectnum].floorpal;
|
||||||
|
@ -133,10 +133,10 @@ void displayweapon_r(int snum, double smoothratio)
|
||||||
if (shadedsector[p->cursectnum] == 1)
|
if (shadedsector[p->cursectnum] == 1)
|
||||||
shade = 16;
|
shade = 16;
|
||||||
else
|
else
|
||||||
shade = p->GetActor()->s.shade;
|
shade = p->GetActor()->s->shade;
|
||||||
if(shade > 24) shade = 24;
|
if(shade > 24) shade = 24;
|
||||||
|
|
||||||
if(p->newOwner != nullptr || 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;
|
return;
|
||||||
|
|
||||||
int opos = p->oweapon_pos * p->oweapon_pos;
|
int opos = p->oweapon_pos * p->oweapon_pos;
|
||||||
|
@ -146,7 +146,7 @@ void displayweapon_r(int snum, double smoothratio)
|
||||||
weapon_xoffset = (160)-90;
|
weapon_xoffset = (160)-90;
|
||||||
weapon_xoffset -= bcosf(weapon_sway * 0.5) * (1. / 1536.);
|
weapon_xoffset -= bcosf(weapon_sway * 0.5) * (1. / 1536.);
|
||||||
weapon_xoffset -= 58 + p->weapon_ang;
|
weapon_xoffset -= 58 + p->weapon_ang;
|
||||||
if( p->GetActor()->s.xrepeat < 8 )
|
if( p->GetActor()->s->xrepeat < 8 )
|
||||||
gun_pos -= fabs(bsinf(weapon_sway * 4., -9));
|
gun_pos -= fabs(bsinf(weapon_sway * 4., -9));
|
||||||
else gun_pos -= fabs(bsinf(weapon_sway * 0.5, -10));
|
else gun_pos -= fabs(bsinf(weapon_sway * 0.5, -10));
|
||||||
|
|
||||||
|
@ -159,7 +159,7 @@ void displayweapon_r(int snum, double smoothratio)
|
||||||
j = 14-p->quick_kick;
|
j = 14-p->quick_kick;
|
||||||
if(j != 14)
|
if(j != 14)
|
||||||
{
|
{
|
||||||
if(p->GetActor()->s.pal == 1)
|
if(p->GetActor()->s->pal == 1)
|
||||||
pal = 1;
|
pal = 1;
|
||||||
else
|
else
|
||||||
pal = p->palookup;
|
pal = p->palookup;
|
||||||
|
@ -214,7 +214,7 @@ void displayweapon_r(int snum, double smoothratio)
|
||||||
else
|
else
|
||||||
temp_kb = MOTOHIT;
|
temp_kb = MOTOHIT;
|
||||||
}
|
}
|
||||||
if (p->GetActor()->s.pal == 1)
|
if (p->GetActor()->s->pal == 1)
|
||||||
pal = 1;
|
pal = 1;
|
||||||
else
|
else
|
||||||
pal = sector[p->cursectnum].floorpal;
|
pal = sector[p->cursectnum].floorpal;
|
||||||
|
@ -278,7 +278,7 @@ void displayweapon_r(int snum, double smoothratio)
|
||||||
temp_kb = BOATHIT;
|
temp_kb = BOATHIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p->GetActor()->s.pal == 1)
|
if (p->GetActor()->s->pal == 1)
|
||||||
pal = 1;
|
pal = 1;
|
||||||
else
|
else
|
||||||
pal = sector[p->cursectnum].floorpal;
|
pal = sector[p->cursectnum].floorpal;
|
||||||
|
@ -295,12 +295,12 @@ void displayweapon_r(int snum, double smoothratio)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p->GetActor()->s.xrepeat < 8)
|
if (p->GetActor()->s->xrepeat < 8)
|
||||||
{
|
{
|
||||||
static int fistsign;
|
static int fistsign;
|
||||||
if (p->jetpack_on == 0)
|
if (p->jetpack_on == 0)
|
||||||
{
|
{
|
||||||
i = p->GetActor()->s.xvel;
|
i = p->GetActor()->s->xvel;
|
||||||
looking_arc += 32 - (i >> 1);
|
looking_arc += 32 - (i >> 1);
|
||||||
fistsign += i >> 1;
|
fistsign += i >> 1;
|
||||||
}
|
}
|
||||||
|
@ -315,7 +315,7 @@ void displayweapon_r(int snum, double smoothratio)
|
||||||
{
|
{
|
||||||
int pin = 0;
|
int pin = 0;
|
||||||
|
|
||||||
if (p->GetActor()->s.pal == 1)
|
if (p->GetActor()->s->pal == 1)
|
||||||
pal = 1;
|
pal = 1;
|
||||||
else
|
else
|
||||||
pal = sector[p->cursectnum].floorpal;
|
pal = sector[p->cursectnum].floorpal;
|
||||||
|
@ -500,7 +500,7 @@ void displayweapon_r(int snum, double smoothratio)
|
||||||
{
|
{
|
||||||
weapon_xoffset -= 8;
|
weapon_xoffset -= 8;
|
||||||
|
|
||||||
if (p->GetActor()->s.pal == 1)
|
if (p->GetActor()->s->pal == 1)
|
||||||
pal = 1;
|
pal = 1;
|
||||||
else
|
else
|
||||||
pal = sector[p->cursectnum].floorpal;
|
pal = sector[p->cursectnum].floorpal;
|
||||||
|
@ -615,7 +615,7 @@ void displayweapon_r(int snum, double smoothratio)
|
||||||
if (*kb > 0)
|
if (*kb > 0)
|
||||||
gun_pos -= bsinf((*kb) << 7, -12);
|
gun_pos -= bsinf((*kb) << 7, -12);
|
||||||
|
|
||||||
if (*kb > 0 && p->GetActor()->s.pal != 1) weapon_xoffset += 1 - (rand() & 3);
|
if (*kb > 0 && p->GetActor()->s->pal != 1) weapon_xoffset += 1 - (rand() & 3);
|
||||||
|
|
||||||
switch (*kb)
|
switch (*kb)
|
||||||
{
|
{
|
||||||
|
@ -828,7 +828,7 @@ void displayweapon_r(int snum, double smoothratio)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (p->GetActor()->s.pal != 1)
|
if (p->GetActor()->s->pal != 1)
|
||||||
{
|
{
|
||||||
weapon_xoffset += rand() & 3;
|
weapon_xoffset += rand() & 3;
|
||||||
gun_pos += (rand() & 3);
|
gun_pos += (rand() & 3);
|
||||||
|
|
|
@ -39,7 +39,7 @@ inline int bossguy(spritetype const* const pSprite)
|
||||||
|
|
||||||
inline int actorflag(DDukeActor * actor, int mask)
|
inline int actorflag(DDukeActor * actor, int mask)
|
||||||
{
|
{
|
||||||
return (((gs.actorinfo[actor->s.picnum].flags) & mask) != 0);
|
return (((gs.actorinfo[actor->s->picnum].flags) & mask) != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int actorfella(DDukeActor* actor)
|
inline int actorfella(DDukeActor* actor)
|
||||||
|
@ -70,14 +70,14 @@ inline void settileflag(int flag, const std::initializer_list<short>& types)
|
||||||
|
|
||||||
inline bool wallswitchcheck(DDukeActor* s)
|
inline bool wallswitchcheck(DDukeActor* s)
|
||||||
{
|
{
|
||||||
return !!(gs.tileinfo[s->s.picnum].flags & TFLAG_WALLSWITCH);
|
return !!(gs.tileinfo[s->s->picnum].flags & TFLAG_WALLSWITCH);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int checkcursectnums(int se)
|
inline int checkcursectnums(int se)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for(i=connecthead;i>=0;i=connectpoint2[i])
|
for(i=connecthead;i>=0;i=connectpoint2[i])
|
||||||
if(ps[i].GetActor() && ps[i].GetActor()->s.sectnum == se ) return i;
|
if(ps[i].GetActor() && ps[i].GetActor()->s->sectnum == se ) return i;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -76,18 +76,18 @@ void hud_input(int plnum)
|
||||||
{
|
{
|
||||||
if (PlayerInput(plnum, SB_QUICK_KICK) && p->last_pissed_time == 0)
|
if (PlayerInput(plnum, SB_QUICK_KICK) && p->last_pissed_time == 0)
|
||||||
{
|
{
|
||||||
if (!isRRRA() || p->GetActor()->s.extra > 0)
|
if (!isRRRA() || p->GetActor()->s->extra > 0)
|
||||||
{
|
{
|
||||||
p->last_pissed_time = 4000;
|
p->last_pissed_time = 4000;
|
||||||
S_PlayActorSound(437, pact);
|
S_PlayActorSound(437, pact);
|
||||||
if (p->GetActor()->s.extra <= gs.max_player_health - gs.max_player_health / 10)
|
if (p->GetActor()->s->extra <= gs.max_player_health - gs.max_player_health / 10)
|
||||||
{
|
{
|
||||||
p->GetActor()->s.extra += 2;
|
p->GetActor()->s->extra += 2;
|
||||||
p->last_extra = p->GetActor()->s.extra;
|
p->last_extra = p->GetActor()->s->extra;
|
||||||
p->resurrected = true;
|
p->resurrected = true;
|
||||||
}
|
}
|
||||||
else if (p->GetActor()->s.extra < gs.max_player_health)
|
else if (p->GetActor()->s->extra < gs.max_player_health)
|
||||||
p->GetActor()->s.extra = gs.max_player_health;
|
p->GetActor()->s->extra = gs.max_player_health;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -115,7 +115,7 @@ void hud_input(int plnum)
|
||||||
|
|
||||||
// Don't go on if paused or dead.
|
// Don't go on if paused or dead.
|
||||||
if (paused) return;
|
if (paused) return;
|
||||||
if (p->GetActor()->s.extra <= 0) return;
|
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.
|
// 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 == nullptr)
|
if (PlayerInput(plnum, SB_INVUSE) && p->newOwner == nullptr)
|
||||||
|
@ -289,8 +289,8 @@ void hud_input(int plnum)
|
||||||
p->posz + (30 << 8), TILE_APLAYER, -64, 0, 0, p->angle.ang.asbuild(), 0, 0, nullptr, 10);
|
p->posz + (30 << 8), TILE_APLAYER, -64, 0, 0, p->angle.ang.asbuild(), 0, 0, nullptr, 10);
|
||||||
pactor->temp_data[3] = pactor->temp_data[4] = 0;
|
pactor->temp_data[3] = pactor->temp_data[4] = 0;
|
||||||
p->holoduke_on = pactor;
|
p->holoduke_on = pactor;
|
||||||
pactor->s.yvel = plnum;
|
pactor->s->yvel = plnum;
|
||||||
pactor->s.extra = 0;
|
pactor->s->extra = 0;
|
||||||
FTA(QUOTE_HOLODUKE_ON, p);
|
FTA(QUOTE_HOLODUKE_ON, p);
|
||||||
S_PlayActorSound(TELEPORTER, p->holoduke_on);
|
S_PlayActorSound(TELEPORTER, p->holoduke_on);
|
||||||
}
|
}
|
||||||
|
@ -306,12 +306,12 @@ void hud_input(int plnum)
|
||||||
}
|
}
|
||||||
else // In RR this means drinking whiskey.
|
else // In RR this means drinking whiskey.
|
||||||
{
|
{
|
||||||
if (p->holoduke_amount > 0 && p->GetActor()->s.extra < gs.max_player_health)
|
if (p->holoduke_amount > 0 && p->GetActor()->s->extra < gs.max_player_health)
|
||||||
{
|
{
|
||||||
p->holoduke_amount -= 400;
|
p->holoduke_amount -= 400;
|
||||||
p->GetActor()->s.extra += 5;
|
p->GetActor()->s->extra += 5;
|
||||||
if (p->GetActor()->s.extra > gs.max_player_health)
|
if (p->GetActor()->s->extra > gs.max_player_health)
|
||||||
p->GetActor()->s.extra = gs.max_player_health;
|
p->GetActor()->s->extra = gs.max_player_health;
|
||||||
|
|
||||||
p->drink_amt += 5;
|
p->drink_amt += 5;
|
||||||
p->inven_icon = 3;
|
p->inven_icon = 3;
|
||||||
|
@ -339,18 +339,18 @@ void hud_input(int plnum)
|
||||||
madenoise(plnum);
|
madenoise(plnum);
|
||||||
if (sector[p->cursectnum].lotag == 857)
|
if (sector[p->cursectnum].lotag == 857)
|
||||||
{
|
{
|
||||||
if (p->GetActor()->s.extra <= gs.max_player_health)
|
if (p->GetActor()->s->extra <= gs.max_player_health)
|
||||||
{
|
{
|
||||||
p->GetActor()->s.extra += 10;
|
p->GetActor()->s->extra += 10;
|
||||||
if (p->GetActor()->s.extra >= gs.max_player_health)
|
if (p->GetActor()->s->extra >= gs.max_player_health)
|
||||||
p->GetActor()->s.extra = gs.max_player_health;
|
p->GetActor()->s->extra = gs.max_player_health;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (p->GetActor()->s.extra + 1 <= gs.max_player_health)
|
if (p->GetActor()->s->extra + 1 <= gs.max_player_health)
|
||||||
{
|
{
|
||||||
p->GetActor()->s.extra++;
|
p->GetActor()->s->extra++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -363,21 +363,21 @@ void hud_input(int plnum)
|
||||||
OnEvent(EVENT_USEMEDKIT, plnum, nullptr, -1);
|
OnEvent(EVENT_USEMEDKIT, plnum, nullptr, -1);
|
||||||
if (GetGameVarID(g_iReturnVarID, nullptr, plnum) == 0)
|
if (GetGameVarID(g_iReturnVarID, nullptr, plnum) == 0)
|
||||||
{
|
{
|
||||||
if (p->firstaid_amount > 0 && p->GetActor()->s.extra < gs.max_player_health)
|
if (p->firstaid_amount > 0 && p->GetActor()->s->extra < gs.max_player_health)
|
||||||
{
|
{
|
||||||
if (!isRR())
|
if (!isRR())
|
||||||
{
|
{
|
||||||
int j = gs.max_player_health - p->GetActor()->s.extra;
|
int j = gs.max_player_health - p->GetActor()->s->extra;
|
||||||
|
|
||||||
if ((unsigned int)p->firstaid_amount > j)
|
if ((unsigned int)p->firstaid_amount > j)
|
||||||
{
|
{
|
||||||
p->firstaid_amount -= j;
|
p->firstaid_amount -= j;
|
||||||
p->GetActor()->s.extra = gs.max_player_health;
|
p->GetActor()->s->extra = gs.max_player_health;
|
||||||
p->inven_icon = 1;
|
p->inven_icon = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
p->GetActor()->s.extra += p->firstaid_amount;
|
p->GetActor()->s->extra += p->firstaid_amount;
|
||||||
p->firstaid_amount = 0;
|
p->firstaid_amount = 0;
|
||||||
checkavailinven(p);
|
checkavailinven(p);
|
||||||
}
|
}
|
||||||
|
@ -389,19 +389,19 @@ void hud_input(int plnum)
|
||||||
if (p->firstaid_amount > j)
|
if (p->firstaid_amount > j)
|
||||||
{
|
{
|
||||||
p->firstaid_amount -= j;
|
p->firstaid_amount -= j;
|
||||||
p->GetActor()->s.extra += j;
|
p->GetActor()->s->extra += j;
|
||||||
if (p->GetActor()->s.extra > gs.max_player_health)
|
if (p->GetActor()->s->extra > gs.max_player_health)
|
||||||
p->GetActor()->s.extra = gs.max_player_health;
|
p->GetActor()->s->extra = gs.max_player_health;
|
||||||
p->inven_icon = 1;
|
p->inven_icon = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
p->GetActor()->s.extra += p->firstaid_amount;
|
p->GetActor()->s->extra += p->firstaid_amount;
|
||||||
p->firstaid_amount = 0;
|
p->firstaid_amount = 0;
|
||||||
checkavailinven(p);
|
checkavailinven(p);
|
||||||
}
|
}
|
||||||
if (p->GetActor()->s.extra > gs.max_player_health)
|
if (p->GetActor()->s->extra > gs.max_player_health)
|
||||||
p->GetActor()->s.extra = gs.max_player_health;
|
p->GetActor()->s->extra = gs.max_player_health;
|
||||||
p->drink_amt += 10;
|
p->drink_amt += 10;
|
||||||
if (p->drink_amt <= 100 && !S_CheckActorSoundPlaying(pact, DUKE_USEMEDKIT))
|
if (p->drink_amt <= 100 && !S_CheckActorSoundPlaying(pact, DUKE_USEMEDKIT))
|
||||||
S_PlayActorSound(DUKE_USEMEDKIT, pact);
|
S_PlayActorSound(DUKE_USEMEDKIT, pact);
|
||||||
|
@ -444,7 +444,7 @@ void hud_input(int plnum)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// eat cow pie
|
// eat cow pie
|
||||||
if (p->jetpack_amount > 0 && p->GetActor()->s.extra < gs.max_player_health)
|
if (p->jetpack_amount > 0 && p->GetActor()->s->extra < gs.max_player_health)
|
||||||
{
|
{
|
||||||
if (!S_CheckActorSoundPlaying(pact, 429))
|
if (!S_CheckActorSoundPlaying(pact, 429))
|
||||||
S_PlayActorSound(429, pact);
|
S_PlayActorSound(429, pact);
|
||||||
|
@ -464,12 +464,12 @@ void hud_input(int plnum)
|
||||||
p->eat = 100;
|
p->eat = 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
p->GetActor()->s.extra += 5;
|
p->GetActor()->s->extra += 5;
|
||||||
|
|
||||||
p->inven_icon = 4;
|
p->inven_icon = 4;
|
||||||
|
|
||||||
if (p->GetActor()->s.extra > gs.max_player_health)
|
if (p->GetActor()->s->extra > gs.max_player_health)
|
||||||
p->GetActor()->s.extra = gs.max_player_health;
|
p->GetActor()->s->extra = gs.max_player_health;
|
||||||
|
|
||||||
if (p->jetpack_amount <= 0)
|
if (p->jetpack_amount <= 0)
|
||||||
checkavailinven(p);
|
checkavailinven(p);
|
||||||
|
@ -768,7 +768,7 @@ static void processVehicleInput(player_struct *p, ControlInfo* const hidInput, I
|
||||||
|
|
||||||
static void FinalizeInput(player_struct *p, InputPacket& input)
|
static void FinalizeInput(player_struct *p, InputPacket& input)
|
||||||
{
|
{
|
||||||
if (movementBlocked(p) || p->GetActor()->s.extra <= 0 || (p->dead_flag && !ud.god && !p->resurrected))
|
if (movementBlocked(p) || p->GetActor()->s->extra <= 0 || (p->dead_flag && !ud.god && !p->resurrected))
|
||||||
{
|
{
|
||||||
// neutralize all movement when blocked or in automap follow mode
|
// neutralize all movement when blocked or in automap follow mode
|
||||||
loc.fvel = loc.svel = 0;
|
loc.fvel = loc.svel = 0;
|
||||||
|
@ -830,7 +830,7 @@ void GameInterface::GetInput(InputPacket* packet, ControlInfo* const hidInput)
|
||||||
|
|
||||||
if (!SyncInput())
|
if (!SyncInput())
|
||||||
{
|
{
|
||||||
if (p->GetActor()->s.extra > 0)
|
if (p->GetActor()->s->extra > 0)
|
||||||
{
|
{
|
||||||
// Do these in the same order as the old code.
|
// Do these in the same order as the old code.
|
||||||
doslopetilting(p, scaleAdjust);
|
doslopetilting(p, scaleAdjust);
|
||||||
|
@ -841,7 +841,7 @@ void GameInterface::GetInput(InputPacket* packet, ControlInfo* const hidInput)
|
||||||
|
|
||||||
p->angle.processhelpers(scaleAdjust);
|
p->angle.processhelpers(scaleAdjust);
|
||||||
p->horizon.processhelpers(scaleAdjust);
|
p->horizon.processhelpers(scaleAdjust);
|
||||||
p->GetActor()->s.ang = p->angle.ang.asbuild();
|
p->GetActor()->s->ang = p->angle.ang.asbuild();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (packet)
|
if (packet)
|
||||||
|
|
|
@ -45,7 +45,7 @@ int wakeup(DDukeActor* ac, int snum)
|
||||||
player_struct *p;
|
player_struct *p;
|
||||||
int radius;
|
int radius;
|
||||||
p = &ps[snum];
|
p = &ps[snum];
|
||||||
auto spr = &ac->s;
|
auto spr = ac->s;
|
||||||
if (!p->donoise)
|
if (!p->donoise)
|
||||||
return 0;
|
return 0;
|
||||||
if (spr->pal == 30 || spr->pal == 32 || spr->pal == 33 || (isRRRA() && spr->pal == 8))
|
if (spr->pal == 30 || spr->pal == 32 || spr->pal == 33 || (isRRRA() && spr->pal == 8))
|
||||||
|
|
|
@ -67,8 +67,8 @@ void PlayerColorChanged(void)
|
||||||
{
|
{
|
||||||
pp.palookup = ud.user_pals[myconnectindex] = playercolor2lookup(playercolor);
|
pp.palookup = ud.user_pals[myconnectindex] = playercolor2lookup(playercolor);
|
||||||
}
|
}
|
||||||
if (pp.GetActor()->s.picnum == TILE_APLAYER && pp.GetActor()->s.pal != 1)
|
if (pp.GetActor()->s->picnum == TILE_APLAYER && pp.GetActor()->s->pal != 1)
|
||||||
pp.GetActor()->s.pal = ud.user_pals[myconnectindex];
|
pp.GetActor()->s->pal = ud.user_pals[myconnectindex];
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
@ -100,8 +100,8 @@ void quickkill(struct player_struct* p)
|
||||||
SetPlayerPal(p, PalEntry(48, 48, 48, 48));
|
SetPlayerPal(p, PalEntry(48, 48, 48, 48));
|
||||||
|
|
||||||
auto pa = p->GetActor();
|
auto pa = p->GetActor();
|
||||||
pa->s.extra = 0;
|
pa->s->extra = 0;
|
||||||
pa->s.cstat |= 32768;
|
pa->s->cstat |= 32768;
|
||||||
if (ud.god == 0) fi.guts(pa, TILE_JIBS6, 8, myconnectindex);
|
if (ud.god == 0) fi.guts(pa, TILE_JIBS6, 8, myconnectindex);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -167,7 +167,7 @@ void tracers(int x1, int y1, int z1, int x2, int y2, int z2, int n)
|
||||||
|
|
||||||
int hits(DDukeActor* actor)
|
int hits(DDukeActor* actor)
|
||||||
{
|
{
|
||||||
auto sp = &actor->s;
|
auto sp = actor->s;
|
||||||
int sx, sy, sz;
|
int sx, sy, sz;
|
||||||
short sect;
|
short sect;
|
||||||
short hw;
|
short hw;
|
||||||
|
@ -190,7 +190,7 @@ int hits(DDukeActor* actor)
|
||||||
|
|
||||||
int hitasprite(DDukeActor* actor, DDukeActor** hitsp)
|
int hitasprite(DDukeActor* actor, DDukeActor** hitsp)
|
||||||
{
|
{
|
||||||
auto sp = &actor->s;
|
auto sp = actor->s;
|
||||||
int sx, sy, sz, zoff;
|
int sx, sy, sz, zoff;
|
||||||
short sect, hw;
|
short sect, hw;
|
||||||
|
|
||||||
|
@ -240,7 +240,7 @@ DDukeActor* aim(DDukeActor* actor, int aang)
|
||||||
int aimstats[] = { STAT_PLAYER, STAT_DUMMYPLAYER, STAT_ACTOR, STAT_ZOMBIEACTOR };
|
int aimstats[] = { STAT_PLAYER, STAT_DUMMYPLAYER, STAT_ACTOR, STAT_ZOMBIEACTOR };
|
||||||
int dx1, dy1, dx2, dy2, dx3, dy3, smax, sdist;
|
int dx1, dy1, dx2, dy2, dx3, dy3, smax, sdist;
|
||||||
int xv, yv;
|
int xv, yv;
|
||||||
auto s = &actor->s;
|
auto s = actor->s;
|
||||||
|
|
||||||
a = s->ang;
|
a = s->ang;
|
||||||
|
|
||||||
|
@ -309,7 +309,7 @@ DDukeActor* aim(DDukeActor* actor, int aang)
|
||||||
DukeStatIterator it(aimstats[k]);
|
DukeStatIterator it(aimstats[k]);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
auto sp = &act->s;
|
auto sp = act->s;
|
||||||
if (sp->xrepeat > 0 && sp->extra >= 0 && (sp->cstat & (257 + 32768)) == 257)
|
if (sp->xrepeat > 0 && sp->extra >= 0 && (sp->cstat & (257 + 32768)) == 257)
|
||||||
if (badguy(sp) || k < 2)
|
if (badguy(sp) || k < 2)
|
||||||
{
|
{
|
||||||
|
@ -381,18 +381,18 @@ void dokneeattack(int snum, const std::initializer_list<int> & respawnlist)
|
||||||
fi.guts(p->actorsqu, TILE_JIBS6, 7, myconnectindex);
|
fi.guts(p->actorsqu, TILE_JIBS6, 7, myconnectindex);
|
||||||
spawn(p->actorsqu, TILE_BLOODPOOL);
|
spawn(p->actorsqu, TILE_BLOODPOOL);
|
||||||
S_PlayActorSound(SQUISHED, p->actorsqu);
|
S_PlayActorSound(SQUISHED, p->actorsqu);
|
||||||
if (isIn(p->actorsqu->s.picnum, respawnlist))
|
if (isIn(p->actorsqu->s->picnum, respawnlist))
|
||||||
{
|
{
|
||||||
if (p->actorsqu->s.yvel)
|
if (p->actorsqu->s->yvel)
|
||||||
fi.operaterespawns(p->actorsqu->s.yvel);
|
fi.operaterespawns(p->actorsqu->s->yvel);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p->actorsqu->s.picnum == TILE_APLAYER)
|
if (p->actorsqu->s->picnum == TILE_APLAYER)
|
||||||
{
|
{
|
||||||
quickkill(&ps[p->actorsqu->s.yvel]);
|
quickkill(&ps[p->actorsqu->s->yvel]);
|
||||||
ps[p->actorsqu->s.yvel].frag_ps = snum;
|
ps[p->actorsqu->s->yvel].frag_ps = snum;
|
||||||
}
|
}
|
||||||
else if (badguy(&p->actorsqu->s))
|
else if (badguy(p->actorsqu->s))
|
||||||
{
|
{
|
||||||
deletesprite(p->actorsqu);
|
deletesprite(p->actorsqu);
|
||||||
p->actors_killed++;
|
p->actors_killed++;
|
||||||
|
@ -415,7 +415,7 @@ int makepainsounds(int snum, int type)
|
||||||
{
|
{
|
||||||
auto p = &ps[snum];
|
auto p = &ps[snum];
|
||||||
auto actor = p->GetActor();
|
auto actor = p->GetActor();
|
||||||
auto s = &actor->s;
|
auto s = actor->s;
|
||||||
int k = 0;
|
int k = 0;
|
||||||
|
|
||||||
switch (type)
|
switch (type)
|
||||||
|
@ -489,7 +489,7 @@ void footprints(int snum)
|
||||||
{
|
{
|
||||||
auto p = &ps[snum];
|
auto p = &ps[snum];
|
||||||
auto actor = p->GetActor();
|
auto actor = p->GetActor();
|
||||||
auto s = &actor->s;
|
auto s = actor->s;
|
||||||
auto psect = s->sectnum;
|
auto psect = s->sectnum;
|
||||||
|
|
||||||
if (p->footprintcount > 0 && p->on_ground)
|
if (p->footprintcount > 0 && p->on_ground)
|
||||||
|
@ -499,9 +499,9 @@ void footprints(int snum)
|
||||||
DukeSectIterator it(psect);
|
DukeSectIterator it(psect);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
if (act->s.picnum == TILE_FOOTPRINTS || act->s.picnum == TILE_FOOTPRINTS2 || act->s.picnum == TILE_FOOTPRINTS3 || act->s.picnum == TILE_FOOTPRINTS4)
|
if (act->s->picnum == TILE_FOOTPRINTS || act->s->picnum == TILE_FOOTPRINTS2 || act->s->picnum == TILE_FOOTPRINTS3 || act->s->picnum == TILE_FOOTPRINTS4)
|
||||||
if (abs(act->s.x - p->posx) < 384)
|
if (abs(act->s->x - p->posx) < 384)
|
||||||
if (abs(act->s.y - p->posy) < 384)
|
if (abs(act->s->y - p->posy) < 384)
|
||||||
{
|
{
|
||||||
j = 1;
|
j = 1;
|
||||||
break;
|
break;
|
||||||
|
@ -520,8 +520,8 @@ void footprints(int snum)
|
||||||
case 2: fprint = spawn(actor, TILE_FOOTPRINTS3); break;
|
case 2: fprint = spawn(actor, TILE_FOOTPRINTS3); break;
|
||||||
default: fprint = spawn(actor, TILE_FOOTPRINTS4); break;
|
default: fprint = spawn(actor, TILE_FOOTPRINTS4); break;
|
||||||
}
|
}
|
||||||
fprint->s.pal = p->footprintpal;
|
fprint->s->pal = p->footprintpal;
|
||||||
fprint->s.shade = p->footprintshade;
|
fprint->s->shade = p->footprintshade;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -544,7 +544,7 @@ void playerisdead(int snum, int psectlotag, int fz, int cz)
|
||||||
{
|
{
|
||||||
auto p = &ps[snum];
|
auto p = &ps[snum];
|
||||||
auto actor = p->GetActor();
|
auto actor = p->GetActor();
|
||||||
auto s = &actor->s;
|
auto s = actor->s;
|
||||||
|
|
||||||
if (p->dead_flag == 0)
|
if (p->dead_flag == 0)
|
||||||
{
|
{
|
||||||
|
@ -1002,7 +1002,7 @@ int haskey(int sect, int snum)
|
||||||
|
|
||||||
void shootbloodsplat(DDukeActor* actor, int p, int sx, int sy, int sz, int sa, int atwith, int BIGFORCE, int OOZFILTER, int NEWBEAST)
|
void shootbloodsplat(DDukeActor* actor, int p, int sx, int sy, int sz, int sa, int atwith, int BIGFORCE, int OOZFILTER, int NEWBEAST)
|
||||||
{
|
{
|
||||||
spritetype* const s = &actor->s;
|
spritetype* const s = actor->s;
|
||||||
int sect = s->sectnum;
|
int sect = s->sectnum;
|
||||||
int zvel;
|
int zvel;
|
||||||
short hitsect, hitwall;
|
short hitsect, hitwall;
|
||||||
|
@ -1037,7 +1037,7 @@ void shootbloodsplat(DDukeActor* actor, int p, int sx, int sy, int sz, int sa, i
|
||||||
DukeSectIterator it(wall[hitwall].nextsector);
|
DukeSectIterator it(wall[hitwall].nextsector);
|
||||||
while (auto act2 = it.Next())
|
while (auto act2 = it.Next())
|
||||||
{
|
{
|
||||||
if (act2->s.statnum == STAT_EFFECTOR && act2->s.lotag == SE_13_EXPLOSIVE)
|
if (act2->s->statnum == STAT_EFFECTOR && act2->s->lotag == SE_13_EXPLOSIVE)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1049,16 +1049,16 @@ void shootbloodsplat(DDukeActor* actor, int p, int sx, int sy, int sz, int sa, i
|
||||||
if (wall[hitwall].hitag == 0)
|
if (wall[hitwall].hitag == 0)
|
||||||
{
|
{
|
||||||
auto spawned = spawn(actor, atwith);
|
auto spawned = spawn(actor, atwith);
|
||||||
spawned->s.xvel = -12;
|
spawned->s->xvel = -12;
|
||||||
spawned->s.ang = getangle(wall[hitwall].x - wall[wall[hitwall].point2].x, wall[hitwall].y - wall[wall[hitwall].point2].y) + 512;
|
spawned->s->ang = getangle(wall[hitwall].x - wall[wall[hitwall].point2].x, wall[hitwall].y - wall[wall[hitwall].point2].y) + 512;
|
||||||
spawned->s.x = hitx;
|
spawned->s->x = hitx;
|
||||||
spawned->s.y = hity;
|
spawned->s->y = hity;
|
||||||
spawned->s.z = hitz;
|
spawned->s->z = hitz;
|
||||||
spawned->s.cstat |= (krand() & 4);
|
spawned->s->cstat |= (krand() & 4);
|
||||||
ssp(spawned, CLIPMASK0);
|
ssp(spawned, CLIPMASK0);
|
||||||
setsprite(spawned, spawned->s.pos);
|
setsprite(spawned, spawned->s->pos);
|
||||||
if (s->picnum == OOZFILTER || s->picnum == NEWBEAST)
|
if (s->picnum == OOZFILTER || s->picnum == NEWBEAST)
|
||||||
spawned->s.pal = 6;
|
spawned->s->pal = 6;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,9 +54,9 @@ void incur_damage_d(struct player_struct* p)
|
||||||
{
|
{
|
||||||
int damage = 0L, shield_damage = 0L;
|
int damage = 0L, shield_damage = 0L;
|
||||||
|
|
||||||
p->GetActor()->s.extra -= p->extra_extra8 >> 8;
|
p->GetActor()->s->extra -= p->extra_extra8 >> 8;
|
||||||
|
|
||||||
damage = p->GetActor()->s.extra - p->last_extra;
|
damage = p->GetActor()->s->extra - p->last_extra;
|
||||||
|
|
||||||
if (damage < 0)
|
if (damage < 0)
|
||||||
{
|
{
|
||||||
|
@ -76,7 +76,7 @@ void incur_damage_d(struct player_struct* p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
p->GetActor()->s.extra = p->last_extra + damage;
|
p->GetActor()->s->extra = p->last_extra + damage;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ void incur_damage_d(struct player_struct* p)
|
||||||
|
|
||||||
static void shootfireball(DDukeActor *actor, int p, int sx, int sy, int sz, int sa)
|
static void shootfireball(DDukeActor *actor, int p, int sx, int sy, int sz, int sa)
|
||||||
{
|
{
|
||||||
auto s = &actor->s;
|
auto s = actor->s;
|
||||||
int vel, zvel;
|
int vel, zvel;
|
||||||
|
|
||||||
if (s->extra >= 0)
|
if (s->extra >= 0)
|
||||||
|
@ -127,7 +127,7 @@ static void shootfireball(DDukeActor *actor, int p, int sx, int sy, int sz, int
|
||||||
}
|
}
|
||||||
|
|
||||||
auto spawned = EGS(s->sectnum, sx, sy, sz, FIREBALL, -127, sizx, sizy, sa, vel, zvel, actor, (short)4);
|
auto spawned = EGS(s->sectnum, sx, sy, sz, FIREBALL, -127, sizx, sizy, sa, vel, zvel, actor, (short)4);
|
||||||
auto spr = &spawned->s;
|
auto spr = spawned->s;
|
||||||
spr->extra += (krand() & 7);
|
spr->extra += (krand() & 7);
|
||||||
if (s->picnum == BOSS5 || p >= 0)
|
if (s->picnum == BOSS5 || p >= 0)
|
||||||
{
|
{
|
||||||
|
@ -147,7 +147,7 @@ static void shootfireball(DDukeActor *actor, int p, int sx, int sy, int sz, int
|
||||||
|
|
||||||
static void shootflamethrowerflame(DDukeActor* actor, int p, int sx, int sy, int sz, int sa)
|
static void shootflamethrowerflame(DDukeActor* actor, int p, int sx, int sy, int sz, int sa)
|
||||||
{
|
{
|
||||||
auto s = &actor->s;
|
auto s = actor->s;
|
||||||
int vel, zvel;
|
int vel, zvel;
|
||||||
|
|
||||||
if (s->extra >= 0)
|
if (s->extra >= 0)
|
||||||
|
@ -182,10 +182,10 @@ static void shootflamethrowerflame(DDukeActor* actor, int p, int sx, int sy, int
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
zvel = -MulScale(ps[p].horizon.sum().asq16(), 81, 16);
|
zvel = -MulScale(ps[p].horizon.sum().asq16(), 81, 16);
|
||||||
if (ps[p].GetActor()->s.xvel != 0)
|
if (ps[p].GetActor()->s->xvel != 0)
|
||||||
vel = (int)((((512 - (1024
|
vel = (int)((((512 - (1024
|
||||||
- abs(abs(getangle(sx - ps[p].oposx, sy - ps[p].oposy) - sa) - 1024)))
|
- abs(abs(getangle(sx - ps[p].oposx, sy - ps[p].oposy) - sa) - 1024)))
|
||||||
* 0.001953125f) * ps[p].GetActor()->s.xvel) + 400);
|
* 0.001953125f) * ps[p].GetActor()->s->xvel) + 400);
|
||||||
if (sector[s->sectnum].lotag == 2 && (krand() % 5) == 0)
|
if (sector[s->sectnum].lotag == 2 && (krand() % 5) == 0)
|
||||||
spawned = spawn(actor, WATERBUBBLE);
|
spawned = spawn(actor, WATERBUBBLE);
|
||||||
}
|
}
|
||||||
|
@ -193,30 +193,30 @@ static void shootflamethrowerflame(DDukeActor* actor, int p, int sx, int sy, int
|
||||||
if (spawned == nullptr)
|
if (spawned == nullptr)
|
||||||
{
|
{
|
||||||
spawned = spawn(actor, FLAMETHROWERFLAME);
|
spawned = spawn(actor, FLAMETHROWERFLAME);
|
||||||
spawned->s.xvel = (short)vel;
|
spawned->s->xvel = (short)vel;
|
||||||
spawned->s.zvel = (short)zvel;
|
spawned->s->zvel = (short)zvel;
|
||||||
}
|
}
|
||||||
|
|
||||||
spawned->s.x = sx + bsin(sa + 630) / 448;
|
spawned->s->x = sx + bsin(sa + 630) / 448;
|
||||||
spawned->s.y = sy + bsin(sa + 112) / 448;
|
spawned->s->y = sy + bsin(sa + 112) / 448;
|
||||||
spawned->s.z = sz - 256;
|
spawned->s->z = sz - 256;
|
||||||
spawned->s.sectnum = s->sectnum;
|
spawned->s->sectnum = s->sectnum;
|
||||||
spawned->s.cstat = 0x80;
|
spawned->s->cstat = 0x80;
|
||||||
spawned->s.ang = sa;
|
spawned->s->ang = sa;
|
||||||
spawned->s.xrepeat = 2;
|
spawned->s->xrepeat = 2;
|
||||||
spawned->s.yrepeat = 2;
|
spawned->s->yrepeat = 2;
|
||||||
spawned->s.clipdist = 40;
|
spawned->s->clipdist = 40;
|
||||||
spawned->s.yvel = p;
|
spawned->s->yvel = p;
|
||||||
spawned->SetOwner(actor);
|
spawned->SetOwner(actor);
|
||||||
|
|
||||||
if (p == -1)
|
if (p == -1)
|
||||||
{
|
{
|
||||||
if (s->picnum == BOSS5)
|
if (s->picnum == BOSS5)
|
||||||
{
|
{
|
||||||
spawned->s.x -= bsin(sa) / 56;
|
spawned->s->x -= bsin(sa) / 56;
|
||||||
spawned->s.y += bcos(sa) / 56;
|
spawned->s->y += bcos(sa) / 56;
|
||||||
spawned->s.xrepeat = 10;
|
spawned->s->xrepeat = 10;
|
||||||
spawned->s.yrepeat = 10;
|
spawned->s->yrepeat = 10;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -229,7 +229,7 @@ static void shootflamethrowerflame(DDukeActor* actor, int p, int sx, int sy, int
|
||||||
|
|
||||||
static void shootknee(DDukeActor* actor, int p, int sx, int sy, int sz, int sa)
|
static void shootknee(DDukeActor* actor, int p, int sx, int sy, int sz, int sa)
|
||||||
{
|
{
|
||||||
auto s = &actor->s;
|
auto s = actor->s;
|
||||||
int sect = s->sectnum;
|
int sect = s->sectnum;
|
||||||
int zvel;
|
int zvel;
|
||||||
short hitsect, hitwall;
|
short hitsect, hitwall;
|
||||||
|
@ -246,8 +246,8 @@ static void shootknee(DDukeActor* actor, int p, int sx, int sy, int sz, int sa)
|
||||||
{
|
{
|
||||||
int x;
|
int x;
|
||||||
auto pactor = ps[findplayer(actor, &x)].GetActor();
|
auto pactor = ps[findplayer(actor, &x)].GetActor();
|
||||||
zvel = ((pactor->s.z - sz) << 8) / (x + 1);
|
zvel = ((pactor->s->z - sz) << 8) / (x + 1);
|
||||||
sa = getangle(pactor->s.x - sx, pactor->s.y - sy);
|
sa = getangle(pactor->s->x - sx, pactor->s->y - sy);
|
||||||
}
|
}
|
||||||
|
|
||||||
hitscan(sx, sy, sz, sect,
|
hitscan(sx, sy, sz, sect,
|
||||||
|
@ -263,18 +263,18 @@ static void shootknee(DDukeActor* actor, int p, int sx, int sy, int sz, int sa)
|
||||||
if (hitwall >= 0 || hitsprt)
|
if (hitwall >= 0 || hitsprt)
|
||||||
{
|
{
|
||||||
auto knee = EGS(hitsect, hitx, hity, hitz, KNEE, -15, 0, 0, sa, 32, 0, actor, 4);
|
auto knee = EGS(hitsect, hitx, hity, hitz, KNEE, -15, 0, 0, sa, 32, 0, actor, 4);
|
||||||
knee->s.extra += (krand() & 7);
|
knee->s->extra += (krand() & 7);
|
||||||
if (p >= 0)
|
if (p >= 0)
|
||||||
{
|
{
|
||||||
auto k = spawn(knee, SMALLSMOKE);
|
auto k = spawn(knee, SMALLSMOKE);
|
||||||
k->s.z -= (8 << 8);
|
k->s->z -= (8 << 8);
|
||||||
S_PlayActorSound(KICK_HIT, knee);
|
S_PlayActorSound(KICK_HIT, knee);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p >= 0 && ps[p].steroids_amount > 0 && ps[p].steroids_amount < 400)
|
if (p >= 0 && ps[p].steroids_amount > 0 && ps[p].steroids_amount < 400)
|
||||||
knee->s.extra += (gs.max_player_health >> 2);
|
knee->s->extra += (gs.max_player_health >> 2);
|
||||||
|
|
||||||
if (hitsprt && hitsprt->s.picnum != ACCESSSWITCH && hitsprt->s.picnum != ACCESSSWITCH2)
|
if (hitsprt && hitsprt->s->picnum != ACCESSSWITCH && hitsprt->s->picnum != ACCESSSWITCH2)
|
||||||
{
|
{
|
||||||
fi.checkhitsprite(hitsprt, knee);
|
fi.checkhitsprite(hitsprt, knee);
|
||||||
if (p >= 0) fi.checkhitswitch(p, -1, hitsprt);
|
if (p >= 0) fi.checkhitswitch(p, -1, hitsprt);
|
||||||
|
@ -297,12 +297,12 @@ static void shootknee(DDukeActor* actor, int p, int sx, int sy, int sz, int sa)
|
||||||
else if (p >= 0 && zvel > 0 && sector[hitsect].lotag == 1)
|
else if (p >= 0 && zvel > 0 && sector[hitsect].lotag == 1)
|
||||||
{
|
{
|
||||||
auto splash = spawn(ps[p].GetActor(), WATERSPLASH2);
|
auto splash = spawn(ps[p].GetActor(), WATERSPLASH2);
|
||||||
splash->s.x = hitx;
|
splash->s->x = hitx;
|
||||||
splash->s.y = hity;
|
splash->s->y = hity;
|
||||||
splash->s.ang = ps[p].angle.ang.asbuild(); // Total tweek
|
splash->s->ang = ps[p].angle.ang.asbuild(); // Total tweek
|
||||||
splash->s.xvel = 32;
|
splash->s->xvel = 32;
|
||||||
ssp(actor, CLIPMASK0);
|
ssp(actor, CLIPMASK0);
|
||||||
splash->s.xvel = 0;
|
splash->s->xvel = 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -316,7 +316,7 @@ static void shootknee(DDukeActor* actor, int p, int sx, int sy, int sz, int sa)
|
||||||
|
|
||||||
static void shootweapon(DDukeActor *actor, int p, int sx, int sy, int sz, int sa, int atwith)
|
static void shootweapon(DDukeActor *actor, int p, int sx, int sy, int sz, int sa, int atwith)
|
||||||
{
|
{
|
||||||
auto s = &actor->s;
|
auto s = actor->s;
|
||||||
int sect = s->sectnum;
|
int sect = s->sectnum;
|
||||||
int zvel;
|
int zvel;
|
||||||
short hitsect, hitwall;
|
short hitsect, hitwall;
|
||||||
|
@ -338,8 +338,8 @@ static void shootweapon(DDukeActor *actor, int p, int sx, int sy, int sz, int sa
|
||||||
|
|
||||||
if (aimed)
|
if (aimed)
|
||||||
{
|
{
|
||||||
int dal = ((aimed->s.xrepeat * tileHeight(aimed->s.picnum)) << 1) + (5 << 8);
|
int dal = ((aimed->s->xrepeat * tileHeight(aimed->s->picnum)) << 1) + (5 << 8);
|
||||||
switch (aimed->s.picnum)
|
switch (aimed->s->picnum)
|
||||||
{
|
{
|
||||||
case GREENSLIME:
|
case GREENSLIME:
|
||||||
case GREENSLIME + 1:
|
case GREENSLIME + 1:
|
||||||
|
@ -353,8 +353,8 @@ static void shootweapon(DDukeActor *actor, int p, int sx, int sy, int sz, int sa
|
||||||
dal -= (8 << 8);
|
dal -= (8 << 8);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
zvel = ((aimed->s.z - sz - dal) << 8) / ldist(ps[p].GetActor(), aimed);
|
zvel = ((aimed->s->z - sz - dal) << 8) / ldist(ps[p].GetActor(), aimed);
|
||||||
sa = getangle(aimed->s.x - sx, aimed->s.y - sy);
|
sa = getangle(aimed->s->x - sx, aimed->s->y - sy);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isWW2GI())
|
if (isWW2GI())
|
||||||
|
@ -419,8 +419,8 @@ static void shootweapon(DDukeActor *actor, int p, int sx, int sy, int sz, int sa
|
||||||
if (p >= 0)
|
if (p >= 0)
|
||||||
{
|
{
|
||||||
spark = EGS(hitsect, hitx, hity, hitz, SHOTSPARK1, -15, 10, 10, sa, 0, 0, actor, 4);
|
spark = EGS(hitsect, hitx, hity, hitz, SHOTSPARK1, -15, 10, 10, sa, 0, 0, actor, 4);
|
||||||
spark->s.extra = ScriptCode[gs.actorinfo[atwith].scriptaddress];
|
spark->s->extra = ScriptCode[gs.actorinfo[atwith].scriptaddress];
|
||||||
spark->s.extra += (krand() % 6);
|
spark->s->extra += (krand() % 6);
|
||||||
|
|
||||||
if (hitwall == -1 && hitact == nullptr)
|
if (hitwall == -1 && hitact == nullptr)
|
||||||
{
|
{
|
||||||
|
@ -428,8 +428,8 @@ static void shootweapon(DDukeActor *actor, int p, int sx, int sy, int sz, int sa
|
||||||
{
|
{
|
||||||
if (sector[hitsect].ceilingstat & 1)
|
if (sector[hitsect].ceilingstat & 1)
|
||||||
{
|
{
|
||||||
spark->s.xrepeat = 0;
|
spark->s->xrepeat = 0;
|
||||||
spark->s.yrepeat = 0;
|
spark->s->yrepeat = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -441,26 +441,26 @@ static void shootweapon(DDukeActor *actor, int p, int sx, int sy, int sz, int sa
|
||||||
if (hitact)
|
if (hitact)
|
||||||
{
|
{
|
||||||
fi.checkhitsprite(hitact, spark);
|
fi.checkhitsprite(hitact, spark);
|
||||||
if (hitact->s.picnum == TILE_APLAYER && (ud.coop != 1 || ud.ffire == 1))
|
if (hitact->s->picnum == TILE_APLAYER && (ud.coop != 1 || ud.ffire == 1))
|
||||||
{
|
{
|
||||||
auto jib = spawn(spark, JIBS6);
|
auto jib = spawn(spark, JIBS6);
|
||||||
spark->s.xrepeat = spark->s.yrepeat = 0;
|
spark->s->xrepeat = spark->s->yrepeat = 0;
|
||||||
jib->s.z += (4 << 8);
|
jib->s->z += (4 << 8);
|
||||||
jib->s.xvel = 16;
|
jib->s->xvel = 16;
|
||||||
jib->s.xrepeat = jib->s.yrepeat = 24;
|
jib->s->xrepeat = jib->s->yrepeat = 24;
|
||||||
jib->s.ang += 64 - (krand() & 127);
|
jib->s->ang += 64 - (krand() & 127);
|
||||||
}
|
}
|
||||||
else spawn(spark, SMALLSMOKE);
|
else spawn(spark, SMALLSMOKE);
|
||||||
|
|
||||||
if (p >= 0 && (
|
if (p >= 0 && (
|
||||||
hitact->s.picnum == DIPSWITCH ||
|
hitact->s->picnum == DIPSWITCH ||
|
||||||
hitact->s.picnum == DIPSWITCH + 1 ||
|
hitact->s->picnum == DIPSWITCH + 1 ||
|
||||||
hitact->s.picnum == DIPSWITCH2 ||
|
hitact->s->picnum == DIPSWITCH2 ||
|
||||||
hitact->s.picnum == DIPSWITCH2 + 1 ||
|
hitact->s->picnum == DIPSWITCH2 + 1 ||
|
||||||
hitact->s.picnum == DIPSWITCH3 ||
|
hitact->s->picnum == DIPSWITCH3 ||
|
||||||
hitact->s.picnum == DIPSWITCH3 + 1 ||
|
hitact->s->picnum == DIPSWITCH3 + 1 ||
|
||||||
hitact->s.picnum == HANDSWITCH ||
|
hitact->s->picnum == HANDSWITCH ||
|
||||||
hitact->s.picnum == HANDSWITCH + 1))
|
hitact->s->picnum == HANDSWITCH + 1))
|
||||||
{
|
{
|
||||||
fi.checkhitswitch(p, -1, hitact);
|
fi.checkhitswitch(p, -1, hitact);
|
||||||
return;
|
return;
|
||||||
|
@ -500,7 +500,7 @@ static void shootweapon(DDukeActor *actor, int p, int sx, int sy, int sz, int sa
|
||||||
DukeSectIterator it(wall[hitwall].nextsector);
|
DukeSectIterator it(wall[hitwall].nextsector);
|
||||||
while (auto l = it.Next())
|
while (auto l = it.Next())
|
||||||
{
|
{
|
||||||
if (l->s.statnum == 3 && l->s.lotag == 13)
|
if (l->s->statnum == 3 && l->s->lotag == 13)
|
||||||
goto SKIPBULLETHOLE;
|
goto SKIPBULLETHOLE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -508,13 +508,13 @@ static void shootweapon(DDukeActor *actor, int p, int sx, int sy, int sz, int sa
|
||||||
DukeStatIterator it(STAT_MISC);
|
DukeStatIterator it(STAT_MISC);
|
||||||
while (auto l = it.Next())
|
while (auto l = it.Next())
|
||||||
{
|
{
|
||||||
if (l->s.picnum == BULLETHOLE)
|
if (l->s->picnum == BULLETHOLE)
|
||||||
if (dist(l, spark) < (12 + (krand() & 7)))
|
if (dist(l, spark) < (12 + (krand() & 7)))
|
||||||
goto SKIPBULLETHOLE;
|
goto SKIPBULLETHOLE;
|
||||||
}
|
}
|
||||||
auto hole = spawn(spark, BULLETHOLE);
|
auto hole = spawn(spark, BULLETHOLE);
|
||||||
hole->s.xvel = -1;
|
hole->s->xvel = -1;
|
||||||
hole->s.ang = getangle(wall[hitwall].x - wall[wall[hitwall].point2].x,
|
hole->s->ang = getangle(wall[hitwall].x - wall[wall[hitwall].point2].x,
|
||||||
wall[hitwall].y - wall[wall[hitwall].point2].y) + 512;
|
wall[hitwall].y - wall[wall[hitwall].point2].y) + 512;
|
||||||
ssp(hole, CLIPMASK0);
|
ssp(hole, CLIPMASK0);
|
||||||
}
|
}
|
||||||
|
@ -532,14 +532,14 @@ static void shootweapon(DDukeActor *actor, int p, int sx, int sy, int sz, int sa
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
spark = EGS(hitsect, hitx, hity, hitz, SHOTSPARK1, -15, 24, 24, sa, 0, 0, actor, 4);
|
spark = EGS(hitsect, hitx, hity, hitz, SHOTSPARK1, -15, 24, 24, sa, 0, 0, actor, 4);
|
||||||
spark->s.extra = ScriptCode[gs.actorinfo[atwith].scriptaddress];
|
spark->s->extra = ScriptCode[gs.actorinfo[atwith].scriptaddress];
|
||||||
|
|
||||||
if (hitact)
|
if (hitact)
|
||||||
{
|
{
|
||||||
fi.checkhitsprite(hitact, spark);
|
fi.checkhitsprite(hitact, spark);
|
||||||
if (hitact->s.picnum != TILE_APLAYER)
|
if (hitact->s->picnum != TILE_APLAYER)
|
||||||
spawn(spark, SMALLSMOKE);
|
spawn(spark, SMALLSMOKE);
|
||||||
else spark->s.xrepeat = spark->s.yrepeat = 0;
|
else spark->s->xrepeat = spark->s->yrepeat = 0;
|
||||||
}
|
}
|
||||||
else if (hitwall >= 0)
|
else if (hitwall >= 0)
|
||||||
fi.checkhitwall(spark, hitwall, hitx, hity, hitz, SHOTSPARK1);
|
fi.checkhitwall(spark, hitwall, hitx, hity, hitz, SHOTSPARK1);
|
||||||
|
@ -560,7 +560,7 @@ static void shootweapon(DDukeActor *actor, int p, int sx, int sy, int sz, int sa
|
||||||
|
|
||||||
static void shootstuff(DDukeActor* actor, int p, int sx, int sy, int sz, int sa, int atwith)
|
static void shootstuff(DDukeActor* actor, int p, int sx, int sy, int sz, int sa, int atwith)
|
||||||
{
|
{
|
||||||
spritetype* const s = &actor->s;
|
spritetype* const s = actor->s;
|
||||||
int sect = s->sectnum;
|
int sect = s->sectnum;
|
||||||
int vel, zvel;
|
int vel, zvel;
|
||||||
short l, scount;
|
short l, scount;
|
||||||
|
@ -590,9 +590,9 @@ static void shootstuff(DDukeActor* actor, int p, int sx, int sy, int sz, int sa,
|
||||||
|
|
||||||
if (aimed)
|
if (aimed)
|
||||||
{
|
{
|
||||||
int dal = ((aimed->s.xrepeat * tileHeight(aimed->s.picnum)) << 1) - (12 << 8);
|
int dal = ((aimed->s->xrepeat * tileHeight(aimed->s->picnum)) << 1) - (12 << 8);
|
||||||
zvel = ((aimed->s.z - sz - dal) * vel) / ldist(ps[p].GetActor(), aimed);
|
zvel = ((aimed->s->z - sz - dal) * vel) / ldist(ps[p].GetActor(), aimed);
|
||||||
sa = getangle(aimed->s.x - sx, aimed->s.y - sy);
|
sa = getangle(aimed->s->x - sx, aimed->s->y - sy);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
zvel = -MulScale(ps[p].horizon.sum().asq16(), 98, 16);
|
zvel = -MulScale(ps[p].horizon.sum().asq16(), 98, 16);
|
||||||
|
@ -638,23 +638,23 @@ static void shootstuff(DDukeActor* actor, int p, int sx, int sy, int sz, int sa,
|
||||||
while (scount > 0)
|
while (scount > 0)
|
||||||
{
|
{
|
||||||
auto spawned = EGS(sect, sx, sy, sz, atwith, -127, sizx, sizy, sa, vel, zvel, actor, 4);
|
auto spawned = EGS(sect, sx, sy, sz, atwith, -127, sizx, sizy, sa, vel, zvel, actor, 4);
|
||||||
spawned->s.extra += (krand() & 7);
|
spawned->s->extra += (krand() & 7);
|
||||||
|
|
||||||
if (atwith == COOLEXPLOSION1)
|
if (atwith == COOLEXPLOSION1)
|
||||||
{
|
{
|
||||||
spawned->s.shade = 0;
|
spawned->s->shade = 0;
|
||||||
if (s->picnum == BOSS2)
|
if (s->picnum == BOSS2)
|
||||||
{
|
{
|
||||||
l = spawned->s.xvel;
|
l = spawned->s->xvel;
|
||||||
spawned->s.xvel = 1024;
|
spawned->s->xvel = 1024;
|
||||||
ssp(spawned, CLIPMASK0);
|
ssp(spawned, CLIPMASK0);
|
||||||
spawned->s.xvel = l;
|
spawned->s->xvel = l;
|
||||||
spawned->s.ang += 128 - (krand() & 255);
|
spawned->s->ang += 128 - (krand() & 255);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
spawned->s.cstat = 128;
|
spawned->s->cstat = 128;
|
||||||
spawned->s.clipdist = 4;
|
spawned->s->clipdist = 4;
|
||||||
|
|
||||||
sa = s->ang + 32 - (krand() & 63);
|
sa = s->ang + 32 - (krand() & 63);
|
||||||
zvel = oldzvel + 512 - (krand() & 1023);
|
zvel = oldzvel + 512 - (krand() & 1023);
|
||||||
|
@ -671,7 +671,7 @@ static void shootstuff(DDukeActor* actor, int p, int sx, int sy, int sz, int sa,
|
||||||
|
|
||||||
static void shootrpg(DDukeActor *actor, int p, int sx, int sy, int sz, int sa, int atwith)
|
static void shootrpg(DDukeActor *actor, int p, int sx, int sy, int sz, int sa, int atwith)
|
||||||
{
|
{
|
||||||
auto s = &actor->s;
|
auto s = actor->s;
|
||||||
int sect = s->sectnum;
|
int sect = s->sectnum;
|
||||||
int vel, zvel;
|
int vel, zvel;
|
||||||
short l, scount;
|
short l, scount;
|
||||||
|
@ -688,10 +688,10 @@ static void shootrpg(DDukeActor *actor, int p, int sx, int sy, int sz, int sa, i
|
||||||
aimed = aim(actor, 48);
|
aimed = aim(actor, 48);
|
||||||
if (aimed)
|
if (aimed)
|
||||||
{
|
{
|
||||||
int dal = ((aimed->s.xrepeat * tileHeight(aimed->s.picnum)) << 1) + (8 << 8);
|
int dal = ((aimed->s->xrepeat * tileHeight(aimed->s->picnum)) << 1) + (8 << 8);
|
||||||
zvel = ((aimed->s.z - sz - dal) * vel) / ldist(ps[p].GetActor(), aimed);
|
zvel = ((aimed->s->z - sz - dal) * vel) / ldist(ps[p].GetActor(), aimed);
|
||||||
if (aimed->s.picnum != RECON)
|
if (aimed->s->picnum != RECON)
|
||||||
sa = getangle(aimed->s.x - sx, aimed->s.y - sy);
|
sa = getangle(aimed->s->x - sx, aimed->s->y - sy);
|
||||||
}
|
}
|
||||||
else zvel = -MulScale(ps[p].horizon.sum().asq16(), 81, 16);
|
else zvel = -MulScale(ps[p].horizon.sum().asq16(), 81, 16);
|
||||||
if (atwith == RPG)
|
if (atwith == RPG)
|
||||||
|
@ -707,7 +707,7 @@ static void shootrpg(DDukeActor *actor, int p, int sx, int sy, int sz, int sa, i
|
||||||
{
|
{
|
||||||
int zoffs = (32 << 8);
|
int zoffs = (32 << 8);
|
||||||
if (isWorldTour()) // Twentieth Anniversary World Tour
|
if (isWorldTour()) // Twentieth Anniversary World Tour
|
||||||
zoffs = (int)((actor->s.yrepeat / 80.0f) * zoffs);
|
zoffs = (int)((actor->s->yrepeat / 80.0f) * zoffs);
|
||||||
sz -= zoffs;
|
sz -= zoffs;
|
||||||
}
|
}
|
||||||
else if (s->picnum == BOSS2)
|
else if (s->picnum == BOSS2)
|
||||||
|
@ -715,7 +715,7 @@ static void shootrpg(DDukeActor *actor, int p, int sx, int sy, int sz, int sa, i
|
||||||
vel += 128;
|
vel += 128;
|
||||||
int zoffs = 24 << 8;
|
int zoffs = 24 << 8;
|
||||||
if (isWorldTour()) // Twentieth Anniversary World Tour
|
if (isWorldTour()) // Twentieth Anniversary World Tour
|
||||||
zoffs = (int)((actor->s.yrepeat / 80.0f) * zoffs);
|
zoffs = (int)((actor->s->yrepeat / 80.0f) * zoffs);
|
||||||
sz += zoffs;
|
sz += zoffs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -732,7 +732,7 @@ static void shootrpg(DDukeActor *actor, int p, int sx, int sy, int sz, int sa, i
|
||||||
sy + (bsin(sa + 348) / 448),
|
sy + (bsin(sa + 348) / 448),
|
||||||
sz - (1 << 8), atwith, 0, 14, 14, sa, vel, zvel, actor, 4);
|
sz - (1 << 8), atwith, 0, 14, 14, sa, vel, zvel, actor, 4);
|
||||||
|
|
||||||
auto spj = &spawned->s;
|
auto spj = spawned->s;
|
||||||
spj->extra += (krand() & 7);
|
spj->extra += (krand() & 7);
|
||||||
if (atwith != FREEZEBLAST)
|
if (atwith != FREEZEBLAST)
|
||||||
spawned->temp_actor = aimed;
|
spawned->temp_actor = aimed;
|
||||||
|
@ -761,7 +761,7 @@ static void shootrpg(DDukeActor *actor, int p, int sx, int sy, int sz, int sa, i
|
||||||
|
|
||||||
if (isWorldTour()) // Twentieth Anniversary World Tour
|
if (isWorldTour()) // Twentieth Anniversary World Tour
|
||||||
{
|
{
|
||||||
float siz = actor->s.yrepeat / 80.0f;
|
float siz = actor->s->yrepeat / 80.0f;
|
||||||
xoffs *= siz;
|
xoffs *= siz;
|
||||||
yoffs *= siz;
|
yoffs *= siz;
|
||||||
aoffs *= siz;
|
aoffs *= siz;
|
||||||
|
@ -781,7 +781,7 @@ static void shootrpg(DDukeActor *actor, int p, int sx, int sy, int sz, int sa, i
|
||||||
int aoffs = 8 + (krand() & 255) - 128;
|
int aoffs = 8 + (krand() & 255) - 128;
|
||||||
|
|
||||||
if (isWorldTour()) { // Twentieth Anniversary World Tour
|
if (isWorldTour()) { // Twentieth Anniversary World Tour
|
||||||
int siz = actor->s.yrepeat;
|
int siz = actor->s->yrepeat;
|
||||||
xoffs = Scale(xoffs, siz, 80);
|
xoffs = Scale(xoffs, siz, 80);
|
||||||
yoffs = Scale(yoffs, siz, 80);
|
yoffs = Scale(yoffs, siz, 80);
|
||||||
aoffs = Scale(aoffs, siz, 80);
|
aoffs = Scale(aoffs, siz, 80);
|
||||||
|
@ -842,7 +842,7 @@ static void shootrpg(DDukeActor *actor, int p, int sx, int sy, int sz, int sa, i
|
||||||
|
|
||||||
static void shootlaser(DDukeActor* actor, int p, int sx, int sy, int sz, int sa)
|
static void shootlaser(DDukeActor* actor, int p, int sx, int sy, int sz, int sa)
|
||||||
{
|
{
|
||||||
spritetype* const s = &actor->s;
|
spritetype* const s = actor->s;
|
||||||
int sect = s->sectnum;
|
int sect = s->sectnum;
|
||||||
int zvel;
|
int zvel;
|
||||||
short hitsect, hitwall, j;
|
short hitsect, hitwall, j;
|
||||||
|
@ -884,7 +884,7 @@ static void shootlaser(DDukeActor* actor, int p, int sx, int sy, int sz, int sa)
|
||||||
int lLifetime = GetGameVar("STICKYBOMB_LIFETIME", NAM_GRENADE_LIFETIME, nullptr, p);
|
int lLifetime = GetGameVar("STICKYBOMB_LIFETIME", NAM_GRENADE_LIFETIME, nullptr, p);
|
||||||
int lLifetimeVar = GetGameVar("STICKYBOMB_LIFETIME_VAR", NAM_GRENADE_LIFETIME_VAR, nullptr, p);
|
int lLifetimeVar = GetGameVar("STICKYBOMB_LIFETIME_VAR", NAM_GRENADE_LIFETIME_VAR, nullptr, p);
|
||||||
// set timer. blows up when at zero....
|
// set timer. blows up when at zero....
|
||||||
bomb->s.extra = lLifetime
|
bomb->s->extra = lLifetime
|
||||||
+ MulScale(krand(), lLifetimeVar, 14)
|
+ MulScale(krand(), lLifetimeVar, 14)
|
||||||
- lLifetimeVar;
|
- lLifetimeVar;
|
||||||
}
|
}
|
||||||
|
@ -893,12 +893,12 @@ static void shootlaser(DDukeActor* actor, int p, int sx, int sy, int sz, int sa)
|
||||||
// this originally used the sprite index as tag to link the laser segments.
|
// this originally used the sprite index as tag to link the laser segments.
|
||||||
// This value is never used again to reference an actor by index. Decouple this for robustness.
|
// This value is never used again to reference an actor by index. Decouple this for robustness.
|
||||||
ud.bomb_tag = (ud.bomb_tag + 1) & 32767;
|
ud.bomb_tag = (ud.bomb_tag + 1) & 32767;
|
||||||
bomb->s.hitag = ud.bomb_tag;
|
bomb->s->hitag = ud.bomb_tag;
|
||||||
S_PlayActorSound(LASERTRIP_ONWALL, bomb);
|
S_PlayActorSound(LASERTRIP_ONWALL, bomb);
|
||||||
bomb->s.xvel = -20;
|
bomb->s->xvel = -20;
|
||||||
ssp(bomb, CLIPMASK0);
|
ssp(bomb, CLIPMASK0);
|
||||||
bomb->s.cstat = 16;
|
bomb->s->cstat = 16;
|
||||||
bomb->temp_data[5] = bomb->s.ang = getangle(wall[hitwall].x - wall[wall[hitwall].point2].x, wall[hitwall].y - wall[wall[hitwall].point2].y) - 512;
|
bomb->temp_data[5] = bomb->s->ang = getangle(wall[hitwall].x - wall[wall[hitwall].point2].x, wall[hitwall].y - wall[wall[hitwall].point2].y) - 512;
|
||||||
|
|
||||||
if (p >= 0)
|
if (p >= 0)
|
||||||
ps[p].ammo_amount[TRIPBOMB_WEAPON]--;
|
ps[p].ammo_amount[TRIPBOMB_WEAPON]--;
|
||||||
|
@ -913,7 +913,7 @@ static void shootlaser(DDukeActor* actor, int p, int sx, int sy, int sz, int sa)
|
||||||
|
|
||||||
static void shootgrowspark(DDukeActor* actor, int p, int sx, int sy, int sz, int sa)
|
static void shootgrowspark(DDukeActor* actor, int p, int sx, int sy, int sz, int sa)
|
||||||
{
|
{
|
||||||
auto s = &actor->s;
|
auto s = actor->s;
|
||||||
int sect = s->sectnum;
|
int sect = s->sectnum;
|
||||||
int zvel;
|
int zvel;
|
||||||
short hitsect, hitwall, k;
|
short hitsect, hitwall, k;
|
||||||
|
@ -925,8 +925,8 @@ static void shootgrowspark(DDukeActor* actor, int p, int sx, int sy, int sz, int
|
||||||
auto aimed = aim(actor, AUTO_AIM_ANGLE);
|
auto aimed = aim(actor, AUTO_AIM_ANGLE);
|
||||||
if (aimed)
|
if (aimed)
|
||||||
{
|
{
|
||||||
int dal = ((aimed->s.xrepeat * tileHeight(aimed->s.picnum)) << 1) + (5 << 8);
|
int dal = ((aimed->s->xrepeat * tileHeight(aimed->s->picnum)) << 1) + (5 << 8);
|
||||||
switch (aimed->s.picnum)
|
switch (aimed->s->picnum)
|
||||||
{
|
{
|
||||||
case GREENSLIME:
|
case GREENSLIME:
|
||||||
case GREENSLIME + 1:
|
case GREENSLIME + 1:
|
||||||
|
@ -940,8 +940,8 @@ static void shootgrowspark(DDukeActor* actor, int p, int sx, int sy, int sz, int
|
||||||
dal -= (8 << 8);
|
dal -= (8 << 8);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
zvel = ((aimed->s.z - sz - dal) << 8) / (ldist(ps[p].GetActor(), aimed));
|
zvel = ((aimed->s->z - sz - dal) << 8) / (ldist(ps[p].GetActor(), aimed));
|
||||||
sa = getangle(aimed->s.x - sx, aimed->s.y - sy);
|
sa = getangle(aimed->s->x - sx, aimed->s->y - sy);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -974,9 +974,9 @@ static void shootgrowspark(DDukeActor* actor, int p, int sx, int sy, int sz, int
|
||||||
|
|
||||||
auto spark = EGS(sect, hitx, hity, hitz, GROWSPARK, -16, 28, 28, sa, 0, 0, actor, 1);
|
auto spark = EGS(sect, hitx, hity, hitz, GROWSPARK, -16, 28, 28, sa, 0, 0, actor, 1);
|
||||||
|
|
||||||
spark->s.pal = 2;
|
spark->s->pal = 2;
|
||||||
spark->s.cstat |= 130;
|
spark->s->cstat |= 130;
|
||||||
spark->s.xrepeat = spark->s.yrepeat = 1;
|
spark->s->xrepeat = spark->s->yrepeat = 1;
|
||||||
|
|
||||||
if (hitwall == -1 && hitsprt == nullptr && hitsect >= 0)
|
if (hitwall == -1 && hitsprt == nullptr && hitsect >= 0)
|
||||||
{
|
{
|
||||||
|
@ -998,7 +998,7 @@ static void shootgrowspark(DDukeActor* actor, int p, int sx, int sy, int sz, int
|
||||||
|
|
||||||
void shoot_d(DDukeActor* actor, int atwith)
|
void shoot_d(DDukeActor* actor, int atwith)
|
||||||
{
|
{
|
||||||
spritetype* const s = &actor->s;
|
spritetype* const s = actor->s;
|
||||||
|
|
||||||
short sect, l, j;
|
short sect, l, j;
|
||||||
int sx, sy, sz, sa, p, vel, zvel, x, dal;
|
int sx, sy, sz, sa, p, vel, zvel, x, dal;
|
||||||
|
@ -1065,13 +1065,13 @@ void shoot_d(DDukeActor* actor, int atwith)
|
||||||
case FIREFLY: // BOSS5 shot
|
case FIREFLY: // BOSS5 shot
|
||||||
{
|
{
|
||||||
auto k = spawn(actor, atwith);
|
auto k = spawn(actor, atwith);
|
||||||
k->s.sectnum = sect;
|
k->s->sectnum = sect;
|
||||||
k->s.x = sx;
|
k->s->x = sx;
|
||||||
k->s.y = sy;
|
k->s->y = sy;
|
||||||
k->s.z = sz;
|
k->s->z = sz;
|
||||||
k->s.ang = sa;
|
k->s->ang = sa;
|
||||||
k->s.xvel = 500;
|
k->s->xvel = 500;
|
||||||
k->s.zvel = 0;
|
k->s->zvel = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1145,9 +1145,9 @@ void shoot_d(DDukeActor* actor, int atwith)
|
||||||
auto aimed = isNamWW2GI() ? nullptr : aim(actor, AUTO_AIM_ANGLE);
|
auto aimed = isNamWW2GI() ? nullptr : aim(actor, AUTO_AIM_ANGLE);
|
||||||
if (aimed)
|
if (aimed)
|
||||||
{
|
{
|
||||||
dal = ((aimed->s.xrepeat * tileHeight(aimed->s.picnum)) << 1);
|
dal = ((aimed->s->xrepeat * tileHeight(aimed->s->picnum)) << 1);
|
||||||
zvel = ((aimed->s.z - sz - dal - (4 << 8)) * 768) / (ldist(ps[p].GetActor(), aimed));
|
zvel = ((aimed->s->z - sz - dal - (4 << 8)) * 768) / (ldist(ps[p].GetActor(), aimed));
|
||||||
sa = getangle(aimed->s.x - sx, aimed->s.y - sy);
|
sa = getangle(aimed->s->x - sx, aimed->s->y - sy);
|
||||||
}
|
}
|
||||||
else zvel = -MulScale(ps[p].horizon.sum().asq16(), 98, 16);
|
else zvel = -MulScale(ps[p].horizon.sum().asq16(), 98, 16);
|
||||||
}
|
}
|
||||||
|
@ -1164,8 +1164,8 @@ void shoot_d(DDukeActor* actor, int atwith)
|
||||||
sy + bcos(sa, -12),
|
sy + bcos(sa, -12),
|
||||||
sz + (2 << 8), SHRINKSPARK, -16, 28, 28, sa, 768, zvel, actor, 4);
|
sz + (2 << 8), SHRINKSPARK, -16, 28, 28, sa, 768, zvel, actor, 4);
|
||||||
|
|
||||||
j->s.cstat = 128;
|
j->s->cstat = 128;
|
||||||
j->s.clipdist = 32;
|
j->s->clipdist = 32;
|
||||||
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
@ -1184,7 +1184,7 @@ void selectweapon_d(int snum, int weap) // playernum, weaponnum
|
||||||
{
|
{
|
||||||
int i, j, k;
|
int i, j, k;
|
||||||
auto p = &ps[snum];
|
auto p = &ps[snum];
|
||||||
if (p->last_pissed_time <= (26 * 218) && p->show_empty_weapon == 0 && p->kickback_pic == 0 && p->quick_kick == 0 && p->GetActor()->s.xrepeat > 32 && p->access_incs == 0 && p->knee_incs == 0)
|
if (p->last_pissed_time <= (26 * 218) && p->show_empty_weapon == 0 && p->kickback_pic == 0 && p->quick_kick == 0 && p->GetActor()->s->xrepeat > 32 && p->access_incs == 0 && p->knee_incs == 0)
|
||||||
{
|
{
|
||||||
if ((p->weapon_pos == 0 || (p->holster_weapon && p->weapon_pos == -9)))
|
if ((p->weapon_pos == 0 || (p->holster_weapon && p->weapon_pos == -9)))
|
||||||
{
|
{
|
||||||
|
@ -1313,7 +1313,7 @@ void selectweapon_d(int snum, int weap) // playernum, weaponnum
|
||||||
DukeStatIterator it(STAT_ACTOR);
|
DukeStatIterator it(STAT_ACTOR);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
if (act->s.picnum == HEAVYHBOMB && act->GetOwner() == p->GetActor())
|
if (act->s->picnum == HEAVYHBOMB && act->GetOwner() == p->GetActor())
|
||||||
{
|
{
|
||||||
p->gotweapon.Set(HANDBOMB_WEAPON);
|
p->gotweapon.Set(HANDBOMB_WEAPON);
|
||||||
j = HANDREMOTE_WEAPON;
|
j = HANDREMOTE_WEAPON;
|
||||||
|
@ -1435,7 +1435,7 @@ int doincrements_d(struct player_struct* p)
|
||||||
int snum;
|
int snum;
|
||||||
|
|
||||||
auto pact = p->GetActor();
|
auto pact = p->GetActor();
|
||||||
snum = pact->s.yvel;
|
snum = pact->s->yvel;
|
||||||
|
|
||||||
p->player_par++;
|
p->player_par++;
|
||||||
|
|
||||||
|
@ -1517,7 +1517,7 @@ int doincrements_d(struct player_struct* p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p->quick_kick > 0 && p->GetActor()->s.pal != 1)
|
if (p->quick_kick > 0 && p->GetActor()->s->pal != 1)
|
||||||
{
|
{
|
||||||
p->last_quick_kick = p->quick_kick + 1;
|
p->last_quick_kick = p->quick_kick + 1;
|
||||||
p->quick_kick--;
|
p->quick_kick--;
|
||||||
|
@ -1527,17 +1527,17 @@ int doincrements_d(struct player_struct* p)
|
||||||
else if (p->last_quick_kick > 0)
|
else if (p->last_quick_kick > 0)
|
||||||
p->last_quick_kick--;
|
p->last_quick_kick--;
|
||||||
|
|
||||||
if (p->access_incs && p->GetActor()->s.pal != 1)
|
if (p->access_incs && p->GetActor()->s->pal != 1)
|
||||||
{
|
{
|
||||||
p->access_incs++;
|
p->access_incs++;
|
||||||
if (p->GetActor()->s.extra <= 0)
|
if (p->GetActor()->s->extra <= 0)
|
||||||
p->access_incs = 12;
|
p->access_incs = 12;
|
||||||
if (p->access_incs == 12)
|
if (p->access_incs == 12)
|
||||||
{
|
{
|
||||||
if (p->access_spritenum != nullptr)
|
if (p->access_spritenum != nullptr)
|
||||||
{
|
{
|
||||||
fi.checkhitswitch(snum, -1, p->access_spritenum);
|
fi.checkhitswitch(snum, -1, p->access_spritenum);
|
||||||
switch (p->access_spritenum->s.pal)
|
switch (p->access_spritenum->s->pal)
|
||||||
{
|
{
|
||||||
case 0:p->got_access &= (0xffff - 0x1); break;
|
case 0:p->got_access &= (0xffff - 0x1); break;
|
||||||
case 21:p->got_access &= (0xffff - 0x2); break;
|
case 21:p->got_access &= (0xffff - 0x2); break;
|
||||||
|
@ -1634,7 +1634,7 @@ void checkweapons_d(struct player_struct* p)
|
||||||
|
|
||||||
if (isWW2GI())
|
if (isWW2GI())
|
||||||
{
|
{
|
||||||
int snum = p->GetActor()->s.yvel;
|
int snum = p->GetActor()->s->yvel;
|
||||||
cw = aplWeaponWorksLike[p->curr_weapon][snum];
|
cw = aplWeaponWorksLike[p->curr_weapon][snum];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1809,8 +1809,8 @@ static void movement(int snum, ESyncBits actions, int psect, int fz, int cz, int
|
||||||
else if (p->falling_counter > 9)
|
else if (p->falling_counter > 9)
|
||||||
{
|
{
|
||||||
j = p->falling_counter;
|
j = p->falling_counter;
|
||||||
pact->s.extra -= j - (krand() & 3);
|
pact->s->extra -= j - (krand() & 3);
|
||||||
if (pact->s.extra <= 0)
|
if (pact->s->extra <= 0)
|
||||||
{
|
{
|
||||||
S_PlayActorSound(SQUISHED, pact);
|
S_PlayActorSound(SQUISHED, pact);
|
||||||
SetPlayerPal(p, PalEntry(63, 63, 0, 0));
|
SetPlayerPal(p, PalEntry(63, 63, 0, 0));
|
||||||
|
@ -1987,11 +1987,11 @@ static void underwater(int snum, ESyncBits actions, int psect, int fz, int cz)
|
||||||
if (p->scuba_on && (krand() & 255) < 8)
|
if (p->scuba_on && (krand() & 255) < 8)
|
||||||
{
|
{
|
||||||
auto j = spawn(pact, WATERBUBBLE);
|
auto j = spawn(pact, WATERBUBBLE);
|
||||||
j->s.x += bcos(p->angle.ang.asbuild() + 64 - (global_random & 128), -6);
|
j->s->x += bcos(p->angle.ang.asbuild() + 64 - (global_random & 128), -6);
|
||||||
j->s.y += bsin(p->angle.ang.asbuild() + 64 - (global_random & 128), -6);
|
j->s->y += bsin(p->angle.ang.asbuild() + 64 - (global_random & 128), -6);
|
||||||
j->s.xrepeat = 3;
|
j->s->xrepeat = 3;
|
||||||
j->s.yrepeat = 2;
|
j->s->yrepeat = 2;
|
||||||
j->s.z = p->posz + (8 << 8);
|
j->s->z = p->posz + (8 << 8);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2028,7 +2028,7 @@ int operateTripbomb(int snum)
|
||||||
DukeSectIterator it(sect);
|
DukeSectIterator it(sect);
|
||||||
while (j = it.Next())
|
while (j = it.Next())
|
||||||
{
|
{
|
||||||
auto sj = &j->s;
|
auto sj = j->s;
|
||||||
if (sj->picnum == TRIPBOMB &&
|
if (sj->picnum == TRIPBOMB &&
|
||||||
abs(sj->z - sz) < (12 << 8) && ((sj->x - sx) * (sj->x - sx) + (sj->y - sy) * (sj->y - sy)) < (290 * 290))
|
abs(sj->z - sz) < (12 << 8) && ((sj->x - sx) * (sj->x - sx) + (sj->y - sy) * (sj->y - sy)) < (290 * 290))
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -2210,21 +2210,21 @@ static void operateweapon(int snum, ESyncBits actions, int psect)
|
||||||
|
|
||||||
if (isNam())
|
if (isNam())
|
||||||
{
|
{
|
||||||
spawned->s.extra = MulScale(krand(), NAM_GRENADE_LIFETIME_VAR, 14);
|
spawned->s->extra = MulScale(krand(), NAM_GRENADE_LIFETIME_VAR, 14);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (k == 15)
|
if (k == 15)
|
||||||
{
|
{
|
||||||
spawned->s.yvel = 3;
|
spawned->s->yvel = 3;
|
||||||
spawned->s.z += (8 << 8);
|
spawned->s->z += (8 << 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
k = hits(pact);
|
k = hits(pact);
|
||||||
if (k < 512)
|
if (k < 512)
|
||||||
{
|
{
|
||||||
spawned->s.ang += 1024;
|
spawned->s->ang += 1024;
|
||||||
spawned->s.zvel /= 3;
|
spawned->s->zvel /= 3;
|
||||||
spawned->s.xvel /= 3;
|
spawned->s->xvel /= 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
p->hbomb_on = 1;
|
p->hbomb_on = 1;
|
||||||
|
@ -2348,9 +2348,9 @@ static void operateweapon(int snum, ESyncBits actions, int psect)
|
||||||
case 24:
|
case 24:
|
||||||
{
|
{
|
||||||
auto j = spawn(pact, SHOTGUNSHELL);
|
auto j = spawn(pact, SHOTGUNSHELL);
|
||||||
j->s.ang += 1024;
|
j->s->ang += 1024;
|
||||||
ssp(j, CLIPMASK0);
|
ssp(j, CLIPMASK0);
|
||||||
j->s.ang += 1024;
|
j->s->ang += 1024;
|
||||||
p->kickback_pic++;
|
p->kickback_pic++;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -2374,10 +2374,10 @@ static void operateweapon(int snum, ESyncBits actions, int psect)
|
||||||
{
|
{
|
||||||
auto j = spawn(pact, SHELL);
|
auto j = spawn(pact, SHELL);
|
||||||
|
|
||||||
j->s.ang += 1024;
|
j->s->ang += 1024;
|
||||||
j->s.ang &= 2047;
|
j->s->ang &= 2047;
|
||||||
j->s.xvel += 32;
|
j->s->xvel += 32;
|
||||||
j->s.z += (3 << 8);
|
j->s->z += (3 << 8);
|
||||||
ssp(j, CLIPMASK0);
|
ssp(j, CLIPMASK0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2527,7 +2527,7 @@ static void operateweapon(int snum, ESyncBits actions, int psect)
|
||||||
fi.shoot(pact, FREEZEBLAST);
|
fi.shoot(pact, FREEZEBLAST);
|
||||||
checkavailweapon(p);
|
checkavailweapon(p);
|
||||||
}
|
}
|
||||||
if (pact->s.xrepeat < 32)
|
if (pact->s->xrepeat < 32)
|
||||||
{
|
{
|
||||||
p->okickback_pic = p->kickback_pic = 0; break;
|
p->okickback_pic = p->kickback_pic = 0; break;
|
||||||
}
|
}
|
||||||
|
@ -2627,7 +2627,7 @@ static void processweapon(int snum, ESyncBits actions, int psect)
|
||||||
{
|
{
|
||||||
auto p = &ps[snum];
|
auto p = &ps[snum];
|
||||||
auto pact = p->GetActor();
|
auto pact = p->GetActor();
|
||||||
auto s = &pact->s;
|
auto s = pact->s;
|
||||||
int shrunk = (s->yrepeat < 32);
|
int shrunk = (s->yrepeat < 32);
|
||||||
|
|
||||||
// Set maximum for pistol slightly higher if playing with `cl_showmagamount 1`.
|
// Set maximum for pistol slightly higher if playing with `cl_showmagamount 1`.
|
||||||
|
@ -2736,7 +2736,7 @@ void processinput_d(int snum)
|
||||||
|
|
||||||
p = &ps[snum];
|
p = &ps[snum];
|
||||||
auto pact = p->GetActor();
|
auto pact = p->GetActor();
|
||||||
s = &pact->s;
|
s = pact->s;
|
||||||
|
|
||||||
p->horizon.resetadjustment();
|
p->horizon.resetadjustment();
|
||||||
p->angle.resetadjustment();
|
p->angle.resetadjustment();
|
||||||
|
@ -2784,7 +2784,7 @@ void processinput_d(int snum)
|
||||||
|
|
||||||
if (chz.type == kHitSprite)
|
if (chz.type == kHitSprite)
|
||||||
{
|
{
|
||||||
if (chz.actor->s.statnum == 1 && chz.actor->s.extra >= 0)
|
if (chz.actor->s->statnum == 1 && chz.actor->s->extra >= 0)
|
||||||
{
|
{
|
||||||
chz.type = kHitNone;
|
chz.type = kHitNone;
|
||||||
chz.actor = nullptr;
|
chz.actor = nullptr;
|
||||||
|
@ -2794,15 +2794,15 @@ void processinput_d(int snum)
|
||||||
|
|
||||||
if (clz.type == kHitSprite)
|
if (clz.type == kHitSprite)
|
||||||
{
|
{
|
||||||
if ((clz.actor->s.cstat & 33) == 33)
|
if ((clz.actor->s->cstat & 33) == 33)
|
||||||
{
|
{
|
||||||
psectlotag = 0;
|
psectlotag = 0;
|
||||||
p->footprintcount = 0;
|
p->footprintcount = 0;
|
||||||
p->spritebridge = 1;
|
p->spritebridge = 1;
|
||||||
}
|
}
|
||||||
else if (badguy(clz.actor) && clz.actor->s.xrepeat > 24 && abs(s->z - clz.actor->s.z) < (84 << 8))
|
else if (badguy(clz.actor) && clz.actor->s->xrepeat > 24 && abs(s->z - clz.actor->s->z) < (84 << 8))
|
||||||
{
|
{
|
||||||
j = getangle(clz.actor->s.x - p->posx, clz.actor->s.y - p->posy);
|
j = getangle(clz.actor->s->x - p->posx, clz.actor->s->y - p->posy);
|
||||||
p->posxv -= bcos(j, 4);
|
p->posxv -= bcos(j, 4);
|
||||||
p->posyv -= bsin(j, 4);
|
p->posyv -= bsin(j, 4);
|
||||||
}
|
}
|
||||||
|
@ -2869,7 +2869,7 @@ void processinput_d(int snum)
|
||||||
p->playerweaponsway(s->xvel);
|
p->playerweaponsway(s->xvel);
|
||||||
|
|
||||||
s->xvel = clamp(ksqrt((p->posx - p->bobposx) * (p->posx - p->bobposx) + (p->posy - p->bobposy) * (p->posy - p->bobposy)), 0, 512);
|
s->xvel = clamp(ksqrt((p->posx - p->bobposx) * (p->posx - p->bobposx) + (p->posy - p->bobposy) * (p->posy - p->bobposy)), 0, 512);
|
||||||
if (p->on_ground) p->bobcounter += p->GetActor()->s.xvel >> 1;
|
if (p->on_ground) p->bobcounter += p->GetActor()->s->xvel >> 1;
|
||||||
|
|
||||||
p->backuppos(ud.clipping == 0 && (sector[p->cursectnum].floorpicnum == MIRROR || p->cursectnum < 0 || p->cursectnum >= MAXSECTORS));
|
p->backuppos(ud.clipping == 0 && (sector[p->cursectnum].floorpicnum == MIRROR || p->cursectnum < 0 || p->cursectnum >= MAXSECTORS));
|
||||||
|
|
||||||
|
@ -2963,7 +2963,7 @@ void processinput_d(int snum)
|
||||||
case 0:
|
case 0:
|
||||||
|
|
||||||
if (clz.type == kHitSprite)
|
if (clz.type == kHitSprite)
|
||||||
j = clz.actor->s.picnum;
|
j = clz.actor->s->picnum;
|
||||||
else
|
else
|
||||||
j = sector[psect].floorpicnum;
|
j = sector[psect].floorpicnum;
|
||||||
|
|
||||||
|
@ -3079,7 +3079,7 @@ HORIZONLY:
|
||||||
if (ud.clipping == 0 && sector[psect].lotag == 31)
|
if (ud.clipping == 0 && sector[psect].lotag == 31)
|
||||||
{
|
{
|
||||||
auto secact = ScriptIndexToActor(sector[psect].hitag);
|
auto secact = ScriptIndexToActor(sector[psect].hitag);
|
||||||
if (secact && secact->s.xvel && secact->temp_data[0] == 0)
|
if (secact && secact->s->xvel && secact->temp_data[0] == 0)
|
||||||
{
|
{
|
||||||
quickkill(p);
|
quickkill(p);
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -46,9 +46,9 @@ void incur_damage_r(struct player_struct* p)
|
||||||
int damage = 0, unk = 0, shield_damage = 0;
|
int damage = 0, unk = 0, shield_damage = 0;
|
||||||
short gut = 0;
|
short gut = 0;
|
||||||
|
|
||||||
p->GetActor()->s.extra -= p->extra_extra8 >> 8;
|
p->GetActor()->s->extra -= p->extra_extra8 >> 8;
|
||||||
|
|
||||||
damage = p->GetActor()->s.extra - p->last_extra;
|
damage = p->GetActor()->s->extra - p->last_extra;
|
||||||
if (damage < 0)
|
if (damage < 0)
|
||||||
{
|
{
|
||||||
p->extra_extra8 = 0;
|
p->extra_extra8 = 0;
|
||||||
|
@ -78,7 +78,7 @@ void incur_damage_r(struct player_struct* p)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
p->GetActor()->s.extra = p->last_extra + damage;
|
p->GetActor()->s->extra = p->last_extra + damage;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,7 +90,7 @@ void incur_damage_r(struct player_struct* p)
|
||||||
|
|
||||||
static void shootmelee(DDukeActor *actor, int p, int sx, int sy, int sz, int sa, int atwith)
|
static void shootmelee(DDukeActor *actor, int p, int sx, int sy, int sz, int sa, int atwith)
|
||||||
{
|
{
|
||||||
spritetype* const s = &actor->s;
|
spritetype* const s = actor->s;
|
||||||
int sect = s->sectnum;
|
int sect = s->sectnum;
|
||||||
int zvel;
|
int zvel;
|
||||||
short hitsect, hitwall;
|
short hitsect, hitwall;
|
||||||
|
@ -107,8 +107,8 @@ static void shootmelee(DDukeActor *actor, int p, int sx, int sy, int sz, int sa,
|
||||||
{
|
{
|
||||||
int x;
|
int x;
|
||||||
auto pspr = ps[findplayer(actor, &x)].GetActor();
|
auto pspr = ps[findplayer(actor, &x)].GetActor();
|
||||||
zvel = ((pspr->s.z - sz) << 8) / (x + 1);
|
zvel = ((pspr->s->z - sz) << 8) / (x + 1);
|
||||||
sa = getangle(pspr->s.x - sx, pspr->s.y - sy);
|
sa = getangle(pspr->s->x - sx, pspr->s->y - sy);
|
||||||
}
|
}
|
||||||
|
|
||||||
hitscan(sx, sy, sz, sect,
|
hitscan(sx, sy, sz, sect,
|
||||||
|
@ -123,21 +123,21 @@ static void shootmelee(DDukeActor *actor, int p, int sx, int sy, int sz, int sa,
|
||||||
while (auto effector = its.Next())
|
while (auto effector = its.Next())
|
||||||
{
|
{
|
||||||
// shouldn't this only check STAT_EFFECTOR?
|
// shouldn't this only check STAT_EFFECTOR?
|
||||||
if (effector->s.sectnum == hitsect && effector->s.picnum == SECTOREFFECTOR && effector->GetOwner()
|
if (effector->s->sectnum == hitsect && effector->s->picnum == SECTOREFFECTOR && effector->GetOwner()
|
||||||
&& effector->s.lotag == 7)
|
&& effector->s->lotag == 7)
|
||||||
{
|
{
|
||||||
int nx, ny, nz;
|
int nx, ny, nz;
|
||||||
nx = hitx + (effector->GetOwner()->s.x - effector->s.x);
|
nx = hitx + (effector->GetOwner()->s->x - effector->s->x);
|
||||||
ny = hity + (effector->GetOwner()->s.y - effector->s.y);
|
ny = hity + (effector->GetOwner()->s->y - effector->s->y);
|
||||||
if (sector[hitsect].lotag == 161)
|
if (sector[hitsect].lotag == 161)
|
||||||
{
|
{
|
||||||
nz = sector[effector->GetOwner()->s.sectnum].floorz;
|
nz = sector[effector->GetOwner()->s->sectnum].floorz;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
nz = sector[effector->GetOwner()->s.sectnum].ceilingz;
|
nz = sector[effector->GetOwner()->s->sectnum].ceilingz;
|
||||||
}
|
}
|
||||||
hitscan(nx, ny, nz, effector->GetOwner()->s.sectnum, bcos(sa), bsin(sa), zvel << 6,
|
hitscan(nx, ny, nz, effector->GetOwner()->s->sectnum, bcos(sa), bsin(sa), zvel << 6,
|
||||||
&hitsect, &hitwall, &hitsprt, &hitx, &hity, &hitz, CLIPMASK1);
|
&hitsect, &hitwall, &hitsprt, &hitx, &hity, &hitz, CLIPMASK1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -154,25 +154,25 @@ static void shootmelee(DDukeActor *actor, int p, int sx, int sy, int sz, int sa,
|
||||||
if (isRRRA() && atwith == SLINGBLADE)
|
if (isRRRA() && atwith == SLINGBLADE)
|
||||||
{
|
{
|
||||||
wpn = EGS(hitsect, hitx, hity, hitz, SLINGBLADE, -15, 0, 0, sa, 32, 0, actor, 4);
|
wpn = EGS(hitsect, hitx, hity, hitz, SLINGBLADE, -15, 0, 0, sa, 32, 0, actor, 4);
|
||||||
wpn->s.extra += 50;
|
wpn->s->extra += 50;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
wpn = EGS(hitsect, hitx, hity, hitz, KNEE, -15, 0, 0, sa, 32, 0, actor, 4);
|
wpn = EGS(hitsect, hitx, hity, hitz, KNEE, -15, 0, 0, sa, 32, 0, actor, 4);
|
||||||
wpn->s.extra += (krand() & 7);
|
wpn->s->extra += (krand() & 7);
|
||||||
}
|
}
|
||||||
if (p >= 0)
|
if (p >= 0)
|
||||||
{
|
{
|
||||||
auto k = spawn(wpn, SMALLSMOKE);
|
auto k = spawn(wpn, SMALLSMOKE);
|
||||||
k->s.z -= (8 << 8);
|
k->s->z -= (8 << 8);
|
||||||
if (atwith == KNEE) S_PlayActorSound(KICK_HIT, wpn);
|
if (atwith == KNEE) S_PlayActorSound(KICK_HIT, wpn);
|
||||||
else if (isRRRA() && atwith == SLINGBLADE) S_PlayActorSound(260, wpn);
|
else if (isRRRA() && atwith == SLINGBLADE) S_PlayActorSound(260, wpn);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p >= 0 && ps[p].steroids_amount > 0 && ps[p].steroids_amount < 400)
|
if (p >= 0 && ps[p].steroids_amount > 0 && ps[p].steroids_amount < 400)
|
||||||
wpn->s.extra += (gs.max_player_health >> 2);
|
wpn->s->extra += (gs.max_player_health >> 2);
|
||||||
|
|
||||||
if (hitsprt && hitsprt->s.picnum != ACCESSSWITCH && hitsprt->s.picnum != ACCESSSWITCH2)
|
if (hitsprt && hitsprt->s->picnum != ACCESSSWITCH && hitsprt->s->picnum != ACCESSSWITCH2)
|
||||||
{
|
{
|
||||||
fi.checkhitsprite(hitsprt, wpn);
|
fi.checkhitsprite(hitsprt, wpn);
|
||||||
if (p >= 0) fi.checkhitswitch(p, -1, hitsprt);
|
if (p >= 0) fi.checkhitswitch(p, -1, hitsprt);
|
||||||
|
@ -194,12 +194,12 @@ static void shootmelee(DDukeActor *actor, int p, int sx, int sy, int sz, int sa,
|
||||||
else if (p >= 0 && zvel > 0 && sector[hitsect].lotag == 1)
|
else if (p >= 0 && zvel > 0 && sector[hitsect].lotag == 1)
|
||||||
{
|
{
|
||||||
auto splash = spawn(ps[p].GetActor(), WATERSPLASH2);
|
auto splash = spawn(ps[p].GetActor(), WATERSPLASH2);
|
||||||
splash->s.x = hitx;
|
splash->s->x = hitx;
|
||||||
splash->s.y = hity;
|
splash->s->y = hity;
|
||||||
splash->s.ang = ps[p].angle.ang.asbuild(); // Total tweek
|
splash->s->ang = ps[p].angle.ang.asbuild(); // Total tweek
|
||||||
splash->s.xvel = 32;
|
splash->s->xvel = 32;
|
||||||
ssp(actor, 0);
|
ssp(actor, 0);
|
||||||
splash->s.xvel = 0;
|
splash->s->xvel = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -212,7 +212,7 @@ static void shootmelee(DDukeActor *actor, int p, int sx, int sy, int sz, int sa,
|
||||||
|
|
||||||
static void shootweapon(DDukeActor* actor, int p, int sx, int sy, int sz, int sa, int atwith)
|
static void shootweapon(DDukeActor* actor, int p, int sx, int sy, int sz, int sa, int atwith)
|
||||||
{
|
{
|
||||||
auto s = &actor->s;
|
auto s = actor->s;
|
||||||
int sect = s->sectnum;
|
int sect = s->sectnum;
|
||||||
int zvel;
|
int zvel;
|
||||||
short hitsect, hitwall;
|
short hitsect, hitwall;
|
||||||
|
@ -226,9 +226,9 @@ static void shootweapon(DDukeActor* actor, int p, int sx, int sy, int sz, int sa
|
||||||
auto aimed = aim(actor, AUTO_AIM_ANGLE);
|
auto aimed = aim(actor, AUTO_AIM_ANGLE);
|
||||||
if (aimed)
|
if (aimed)
|
||||||
{
|
{
|
||||||
int dal = ((aimed->s.xrepeat * tileHeight(aimed->s.picnum)) << 1) + (5 << 8);
|
int dal = ((aimed->s->xrepeat * tileHeight(aimed->s->picnum)) << 1) + (5 << 8);
|
||||||
zvel = ((aimed->s.z - sz - dal) << 8) / ldist(ps[p].GetActor(), aimed);
|
zvel = ((aimed->s->z - sz - dal) << 8) / ldist(ps[p].GetActor(), aimed);
|
||||||
sa = getangle(aimed->s.x - sx, aimed->s.y - sy);
|
sa = getangle(aimed->s->x - sx, aimed->s->y - sy);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (atwith == SHOTSPARK1)
|
if (atwith == SHOTSPARK1)
|
||||||
|
@ -280,21 +280,21 @@ static void shootweapon(DDukeActor* actor, int p, int sx, int sy, int sz, int sa
|
||||||
while (auto effector = its.Next())
|
while (auto effector = its.Next())
|
||||||
{
|
{
|
||||||
// shouldn't this only check STAT_EFFECTOR?
|
// shouldn't this only check STAT_EFFECTOR?
|
||||||
if (effector->s.sectnum == hitsect && effector->s.picnum == SECTOREFFECTOR && effector->GetOwner()
|
if (effector->s->sectnum == hitsect && effector->s->picnum == SECTOREFFECTOR && effector->GetOwner()
|
||||||
&& effector->s.lotag == 7)
|
&& effector->s->lotag == 7)
|
||||||
{
|
{
|
||||||
int nx, ny, nz;
|
int nx, ny, nz;
|
||||||
nx = hitx + (effector->GetOwner()->s.x - effector->s.x);
|
nx = hitx + (effector->GetOwner()->s->x - effector->s->x);
|
||||||
ny = hity + (effector->GetOwner()->s.y - effector->s.y);
|
ny = hity + (effector->GetOwner()->s->y - effector->s->y);
|
||||||
if (sector[hitsect].lotag == 161)
|
if (sector[hitsect].lotag == 161)
|
||||||
{
|
{
|
||||||
nz = sector[effector->GetOwner()->s.sectnum].floorz;
|
nz = sector[effector->GetOwner()->s->sectnum].floorz;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
nz = sector[effector->GetOwner()->s.sectnum].ceilingz;
|
nz = sector[effector->GetOwner()->s->sectnum].ceilingz;
|
||||||
}
|
}
|
||||||
hitscan(nx, ny, nz, effector->GetOwner()->s.sectnum, bcos(sa), bsin(sa), zvel << 6,
|
hitscan(nx, ny, nz, effector->GetOwner()->s->sectnum, bcos(sa), bsin(sa), zvel << 6,
|
||||||
&hitsect, &hitwall, &hitsprt, &hitx, &hity, &hitz, CLIPMASK1);
|
&hitsect, &hitwall, &hitsprt, &hitx, &hity, &hitz, CLIPMASK1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -317,8 +317,8 @@ static void shootweapon(DDukeActor* actor, int p, int sx, int sy, int sz, int sa
|
||||||
if (p >= 0)
|
if (p >= 0)
|
||||||
{
|
{
|
||||||
spark = EGS(hitsect, hitx, hity, hitz, SHOTSPARK1, -15, 10, 10, sa, 0, 0, actor, 4);
|
spark = EGS(hitsect, hitx, hity, hitz, SHOTSPARK1, -15, 10, 10, sa, 0, 0, actor, 4);
|
||||||
spark->s.extra = ScriptCode[gs.actorinfo[atwith].scriptaddress];
|
spark->s->extra = ScriptCode[gs.actorinfo[atwith].scriptaddress];
|
||||||
spark->s.extra += (krand() % 6);
|
spark->s->extra += (krand() % 6);
|
||||||
|
|
||||||
if (hitwall == -1 && hitsprt == nullptr)
|
if (hitwall == -1 && hitsprt == nullptr)
|
||||||
{
|
{
|
||||||
|
@ -326,8 +326,8 @@ static void shootweapon(DDukeActor* actor, int p, int sx, int sy, int sz, int sa
|
||||||
{
|
{
|
||||||
if (sector[hitsect].ceilingstat & 1)
|
if (sector[hitsect].ceilingstat & 1)
|
||||||
{
|
{
|
||||||
spark->s.xrepeat = 0;
|
spark->s->xrepeat = 0;
|
||||||
spark->s.yrepeat = 0;
|
spark->s->yrepeat = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -339,30 +339,30 @@ static void shootweapon(DDukeActor* actor, int p, int sx, int sy, int sz, int sa
|
||||||
|
|
||||||
if (hitsprt)
|
if (hitsprt)
|
||||||
{
|
{
|
||||||
if (hitsprt->s.picnum == 1930)
|
if (hitsprt->s->picnum == 1930)
|
||||||
return;
|
return;
|
||||||
fi.checkhitsprite(hitsprt, spark);
|
fi.checkhitsprite(hitsprt, spark);
|
||||||
if (hitsprt->s.picnum == TILE_APLAYER && (ud.coop != 1 || ud.ffire == 1))
|
if (hitsprt->s->picnum == TILE_APLAYER && (ud.coop != 1 || ud.ffire == 1))
|
||||||
{
|
{
|
||||||
auto l = spawn(spark, JIBS6);
|
auto l = spawn(spark, JIBS6);
|
||||||
spark->s.xrepeat = spark->s.yrepeat = 0;
|
spark->s->xrepeat = spark->s->yrepeat = 0;
|
||||||
l->s.z += (4 << 8);
|
l->s->z += (4 << 8);
|
||||||
l->s.xvel = 16;
|
l->s->xvel = 16;
|
||||||
l->s.xrepeat = l->s.yrepeat = 24;
|
l->s->xrepeat = l->s->yrepeat = 24;
|
||||||
l->s.ang += 64 - (krand() & 127);
|
l->s->ang += 64 - (krand() & 127);
|
||||||
}
|
}
|
||||||
else spawn(spark, SMALLSMOKE);
|
else spawn(spark, SMALLSMOKE);
|
||||||
|
|
||||||
if (p >= 0 && (
|
if (p >= 0 && (
|
||||||
hitsprt->s.picnum == DIPSWITCH ||
|
hitsprt->s->picnum == DIPSWITCH ||
|
||||||
hitsprt->s.picnum == DIPSWITCH + 1 ||
|
hitsprt->s->picnum == DIPSWITCH + 1 ||
|
||||||
hitsprt->s.picnum == DIPSWITCH2 ||
|
hitsprt->s->picnum == DIPSWITCH2 ||
|
||||||
hitsprt->s.picnum == DIPSWITCH2 + 1 ||
|
hitsprt->s->picnum == DIPSWITCH2 + 1 ||
|
||||||
hitsprt->s.picnum == DIPSWITCH3 ||
|
hitsprt->s->picnum == DIPSWITCH3 ||
|
||||||
hitsprt->s.picnum == DIPSWITCH3 + 1 ||
|
hitsprt->s->picnum == DIPSWITCH3 + 1 ||
|
||||||
(isRRRA() && hitsprt->s.picnum == RRTILE8660) ||
|
(isRRRA() && hitsprt->s->picnum == RRTILE8660) ||
|
||||||
hitsprt->s.picnum == HANDSWITCH ||
|
hitsprt->s->picnum == HANDSWITCH ||
|
||||||
hitsprt->s.picnum == HANDSWITCH + 1))
|
hitsprt->s->picnum == HANDSWITCH + 1))
|
||||||
{
|
{
|
||||||
fi.checkhitswitch(p, -1, hitsprt);
|
fi.checkhitswitch(p, -1, hitsprt);
|
||||||
return;
|
return;
|
||||||
|
@ -405,7 +405,7 @@ static void shootweapon(DDukeActor* actor, int p, int sx, int sy, int sz, int sa
|
||||||
DukeSectIterator it(wall[hitwall].nextsector);
|
DukeSectIterator it(wall[hitwall].nextsector);
|
||||||
while (auto l = it.Next())
|
while (auto l = it.Next())
|
||||||
{
|
{
|
||||||
if (l->s.statnum == 3 && l->s.lotag == 13)
|
if (l->s->statnum == 3 && l->s->lotag == 13)
|
||||||
goto SKIPBULLETHOLE;
|
goto SKIPBULLETHOLE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -413,13 +413,13 @@ static void shootweapon(DDukeActor* actor, int p, int sx, int sy, int sz, int sa
|
||||||
DukeStatIterator it(STAT_MISC);
|
DukeStatIterator it(STAT_MISC);
|
||||||
while (auto l = it.Next())
|
while (auto l = it.Next())
|
||||||
{
|
{
|
||||||
if (l->s.picnum == BULLETHOLE)
|
if (l->s->picnum == BULLETHOLE)
|
||||||
if (dist(l, spark) < (12 + (krand() & 7)))
|
if (dist(l, spark) < (12 + (krand() & 7)))
|
||||||
goto SKIPBULLETHOLE;
|
goto SKIPBULLETHOLE;
|
||||||
}
|
}
|
||||||
auto l = spawn(spark, BULLETHOLE);
|
auto l = spawn(spark, BULLETHOLE);
|
||||||
l->s.xvel = -1;
|
l->s->xvel = -1;
|
||||||
l->s.ang = getangle(wall[hitwall].x - wall[wall[hitwall].point2].x,
|
l->s->ang = getangle(wall[hitwall].x - wall[wall[hitwall].point2].x,
|
||||||
wall[hitwall].y - wall[wall[hitwall].point2].y) + 512;
|
wall[hitwall].y - wall[wall[hitwall].point2].y) + 512;
|
||||||
ssp(l, CLIPMASK0);
|
ssp(l, CLIPMASK0);
|
||||||
}
|
}
|
||||||
|
@ -437,14 +437,14 @@ static void shootweapon(DDukeActor* actor, int p, int sx, int sy, int sz, int sa
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
spark = EGS(hitsect, hitx, hity, hitz, SHOTSPARK1, -15, 24, 24, sa, 0, 0, actor, 4);
|
spark = EGS(hitsect, hitx, hity, hitz, SHOTSPARK1, -15, 24, 24, sa, 0, 0, actor, 4);
|
||||||
spark->s.extra = ScriptCode[gs.actorinfo[atwith].scriptaddress];
|
spark->s->extra = ScriptCode[gs.actorinfo[atwith].scriptaddress];
|
||||||
|
|
||||||
if (hitsprt)
|
if (hitsprt)
|
||||||
{
|
{
|
||||||
fi.checkhitsprite(hitsprt, spark);
|
fi.checkhitsprite(hitsprt, spark);
|
||||||
if (hitsprt->s.picnum != TILE_APLAYER)
|
if (hitsprt->s->picnum != TILE_APLAYER)
|
||||||
spawn(spark, SMALLSMOKE);
|
spawn(spark, SMALLSMOKE);
|
||||||
else spark->s.xrepeat = spark->s.yrepeat = 0;
|
else spark->s->xrepeat = spark->s->yrepeat = 0;
|
||||||
}
|
}
|
||||||
else if (hitwall >= 0)
|
else if (hitwall >= 0)
|
||||||
fi.checkhitwall(spark, hitwall, hitx, hity, hitz, SHOTSPARK1);
|
fi.checkhitwall(spark, hitwall, hitx, hity, hitz, SHOTSPARK1);
|
||||||
|
@ -465,7 +465,7 @@ static void shootweapon(DDukeActor* actor, int p, int sx, int sy, int sz, int sa
|
||||||
|
|
||||||
static void shootstuff(DDukeActor* actor, int p, int sx, int sy, int sz, int sa, int atwith)
|
static void shootstuff(DDukeActor* actor, int p, int sx, int sy, int sz, int sa, int atwith)
|
||||||
{
|
{
|
||||||
auto s = &actor->s;
|
auto s = actor->s;
|
||||||
int sect = s->sectnum;
|
int sect = s->sectnum;
|
||||||
int vel, zvel;
|
int vel, zvel;
|
||||||
short scount;
|
short scount;
|
||||||
|
@ -515,9 +515,9 @@ static void shootstuff(DDukeActor* actor, int p, int sx, int sy, int sz, int sa,
|
||||||
|
|
||||||
if (aimed)
|
if (aimed)
|
||||||
{
|
{
|
||||||
int dal = ((aimed->s.xrepeat * tileHeight(aimed->s.picnum)) << 1) - (12 << 8);
|
int dal = ((aimed->s->xrepeat * tileHeight(aimed->s->picnum)) << 1) - (12 << 8);
|
||||||
zvel = ((aimed->s.z - sz - dal) * vel) / ldist(ps[p].GetActor(), aimed);
|
zvel = ((aimed->s->z - sz - dal) * vel) / ldist(ps[p].GetActor(), aimed);
|
||||||
sa = getangle(aimed->s.x - sx, aimed->s.y - sy);
|
sa = getangle(aimed->s->x - sx, aimed->s->y - sy);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -580,17 +580,17 @@ static void shootstuff(DDukeActor* actor, int p, int sx, int sy, int sz, int sa,
|
||||||
while (scount > 0)
|
while (scount > 0)
|
||||||
{
|
{
|
||||||
auto j = EGS(sect, sx, sy, sz, atwith, -127, sizx, sizy, sa, vel, zvel, actor, 4);
|
auto j = EGS(sect, sx, sy, sz, atwith, -127, sizx, sizy, sa, vel, zvel, actor, 4);
|
||||||
j->s.extra += (krand() & 7);
|
j->s->extra += (krand() & 7);
|
||||||
j->s.cstat = 128;
|
j->s->cstat = 128;
|
||||||
j->s.clipdist = 4;
|
j->s->clipdist = 4;
|
||||||
|
|
||||||
sa = s->ang + 32 - (krand() & 63);
|
sa = s->ang + 32 - (krand() & 63);
|
||||||
zvel = oldzvel + 512 - (krand() & 1023);
|
zvel = oldzvel + 512 - (krand() & 1023);
|
||||||
|
|
||||||
if (atwith == FIRELASER)
|
if (atwith == FIRELASER)
|
||||||
{
|
{
|
||||||
j->s.xrepeat = 8;
|
j->s->xrepeat = 8;
|
||||||
j->s.yrepeat = 8;
|
j->s->yrepeat = 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
scount--;
|
scount--;
|
||||||
|
@ -605,7 +605,7 @@ static void shootstuff(DDukeActor* actor, int p, int sx, int sy, int sz, int sa,
|
||||||
|
|
||||||
static void shootrpg(DDukeActor* actor, int p, int sx, int sy, int sz, int sa, int atwith)
|
static void shootrpg(DDukeActor* actor, int p, int sx, int sy, int sz, int sa, int atwith)
|
||||||
{
|
{
|
||||||
auto s = &actor->s;
|
auto s = actor->s;
|
||||||
int sect = s->sectnum;
|
int sect = s->sectnum;
|
||||||
int vel, zvel;
|
int vel, zvel;
|
||||||
short l, scount;
|
short l, scount;
|
||||||
|
@ -625,15 +625,15 @@ static void shootrpg(DDukeActor* actor, int p, int sx, int sy, int sz, int sa, i
|
||||||
{
|
{
|
||||||
if (isRRRA() && atwith == RPG2)
|
if (isRRRA() && atwith == RPG2)
|
||||||
{
|
{
|
||||||
if (aimed->s.picnum == HEN || aimed->s.picnum == HENSTAYPUT)
|
if (aimed->s->picnum == HEN || aimed->s->picnum == HENSTAYPUT)
|
||||||
act90 = ps[screenpeek].GetActor();
|
act90 = ps[screenpeek].GetActor();
|
||||||
else
|
else
|
||||||
act90 = aimed;
|
act90 = aimed;
|
||||||
}
|
}
|
||||||
int dal = ((aimed->s.xrepeat * tileHeight(aimed->s.picnum)) << 1) + (8 << 8);
|
int dal = ((aimed->s->xrepeat * tileHeight(aimed->s->picnum)) << 1) + (8 << 8);
|
||||||
zvel = ((aimed->s.z - sz - dal) * vel) / ldist(ps[p].GetActor(), aimed);
|
zvel = ((aimed->s->z - sz - dal) * vel) / ldist(ps[p].GetActor(), aimed);
|
||||||
if (aimed->s.picnum != RECON)
|
if (aimed->s->picnum != RECON)
|
||||||
sa = getangle(aimed->s.x - sx, aimed->s.y - sy);
|
sa = getangle(aimed->s->x - sx, aimed->s->y - sy);
|
||||||
}
|
}
|
||||||
else zvel = -MulScale(ps[p].horizon.sum().asq16(), 81, 16);
|
else zvel = -MulScale(ps[p].horizon.sum().asq16(), 81, 16);
|
||||||
if (atwith == RPG)
|
if (atwith == RPG)
|
||||||
|
@ -684,67 +684,67 @@ static void shootrpg(DDukeActor* actor, int p, int sx, int sy, int sz, int sa, i
|
||||||
{
|
{
|
||||||
if (atwith == RRTILE1790)
|
if (atwith == RRTILE1790)
|
||||||
{
|
{
|
||||||
spawned->s.extra = 10;
|
spawned->s->extra = 10;
|
||||||
spawned->s.zvel = -(10 << 8);
|
spawned->s->zvel = -(10 << 8);
|
||||||
}
|
}
|
||||||
else if (atwith == RPG2)
|
else if (atwith == RPG2)
|
||||||
{
|
{
|
||||||
spawned->seek_actor = act90;
|
spawned->seek_actor = act90;
|
||||||
spawned->s.hitag = 0;
|
spawned->s->hitag = 0;
|
||||||
fi.lotsofmoney(spawned, (krand() & 3) + 1);
|
fi.lotsofmoney(spawned, (krand() & 3) + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
spawned->s.extra += (krand() & 7);
|
spawned->s->extra += (krand() & 7);
|
||||||
if (atwith != FREEZEBLAST)
|
if (atwith != FREEZEBLAST)
|
||||||
spawned->temp_actor = aimed;
|
spawned->temp_actor = aimed;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
spawned->s.yvel = gs.numfreezebounces;
|
spawned->s->yvel = gs.numfreezebounces;
|
||||||
spawned->s.xrepeat >>= 1;
|
spawned->s->xrepeat >>= 1;
|
||||||
spawned->s.yrepeat >>= 1;
|
spawned->s->yrepeat >>= 1;
|
||||||
spawned->s.zvel -= (2 << 4);
|
spawned->s->zvel -= (2 << 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p == -1)
|
if (p == -1)
|
||||||
{
|
{
|
||||||
if (s->picnum == HULK)
|
if (s->picnum == HULK)
|
||||||
{
|
{
|
||||||
spawned->s.xrepeat = 8;
|
spawned->s->xrepeat = 8;
|
||||||
spawned->s.yrepeat = 8;
|
spawned->s->yrepeat = 8;
|
||||||
}
|
}
|
||||||
else if (atwith != FREEZEBLAST)
|
else if (atwith != FREEZEBLAST)
|
||||||
{
|
{
|
||||||
spawned->s.xrepeat = 30;
|
spawned->s->xrepeat = 30;
|
||||||
spawned->s.yrepeat = 30;
|
spawned->s->yrepeat = 30;
|
||||||
spawned->s.extra >>= 2;
|
spawned->s->extra >>= 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (ps[p].curr_weapon == TIT_WEAPON)
|
else if (ps[p].curr_weapon == TIT_WEAPON)
|
||||||
{
|
{
|
||||||
spawned->s.extra >>= 2;
|
spawned->s->extra >>= 2;
|
||||||
spawned->s.ang += 16 - (krand() & 31);
|
spawned->s->ang += 16 - (krand() & 31);
|
||||||
spawned->s.zvel += 256 - (krand() & 511);
|
spawned->s->zvel += 256 - (krand() & 511);
|
||||||
|
|
||||||
if (ps[p].hbomb_hold_delay)
|
if (ps[p].hbomb_hold_delay)
|
||||||
{
|
{
|
||||||
spawned->s.x -= bsin(sa) / 644;
|
spawned->s->x -= bsin(sa) / 644;
|
||||||
spawned->s.y += bcos(sa) / 644;
|
spawned->s->y += bcos(sa) / 644;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
spawned->s.x += bsin(sa, -8);
|
spawned->s->x += bsin(sa, -8);
|
||||||
spawned->s.y -= bcos(sa, -8);
|
spawned->s->y -= bcos(sa, -8);
|
||||||
}
|
}
|
||||||
spawned->s.xrepeat >>= 1;
|
spawned->s->xrepeat >>= 1;
|
||||||
spawned->s.yrepeat >>= 1;
|
spawned->s->yrepeat >>= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
spawned->s.cstat = 128;
|
spawned->s->cstat = 128;
|
||||||
if (atwith == RPG || (atwith == RPG2 && isRRRA()))
|
if (atwith == RPG || (atwith == RPG2 && isRRRA()))
|
||||||
spawned->s.clipdist = 4;
|
spawned->s->clipdist = 4;
|
||||||
else
|
else
|
||||||
spawned->s.clipdist = 40;
|
spawned->s->clipdist = 40;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -757,7 +757,7 @@ static void shootrpg(DDukeActor* actor, int p, int sx, int sy, int sz, int sa, i
|
||||||
|
|
||||||
static void shootwhip(DDukeActor* actor, int p, int sx, int sy, int sz, int sa, int atwith)
|
static void shootwhip(DDukeActor* actor, int p, int sx, int sy, int sz, int sa, int atwith)
|
||||||
{
|
{
|
||||||
auto s = &actor->s;
|
auto s = actor->s;
|
||||||
int sect = s->sectnum;
|
int sect = s->sectnum;
|
||||||
int vel, zvel;
|
int vel, zvel;
|
||||||
short scount;
|
short scount;
|
||||||
|
@ -784,9 +784,9 @@ static void shootwhip(DDukeActor* actor, int p, int sx, int sy, int sz, int sa,
|
||||||
|
|
||||||
if (aimed)
|
if (aimed)
|
||||||
{
|
{
|
||||||
int dal = ((aimed->s.xrepeat * tileHeight(aimed->s.picnum)) << 1) - (12 << 8);
|
int dal = ((aimed->s->xrepeat * tileHeight(aimed->s->picnum)) << 1) - (12 << 8);
|
||||||
zvel = ((aimed->s.z - sz - dal) * vel) / ldist(ps[p].GetActor(), aimed);
|
zvel = ((aimed->s->z - sz - dal) * vel) / ldist(ps[p].GetActor(), aimed);
|
||||||
sa = getangle(aimed->s.x - sx, aimed->s.y - sy);
|
sa = getangle(aimed->s->x - sx, aimed->s->y - sy);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
zvel = -MulScale(ps[p].horizon.sum().asq16(), 98, 16);
|
zvel = -MulScale(ps[p].horizon.sum().asq16(), 98, 16);
|
||||||
|
@ -813,9 +813,9 @@ static void shootwhip(DDukeActor* actor, int p, int sx, int sy, int sz, int sa,
|
||||||
while (scount > 0)
|
while (scount > 0)
|
||||||
{
|
{
|
||||||
auto j = EGS(sect, sx, sy, sz, atwith, -127, sizx, sizy, sa, vel, zvel, actor, 4);
|
auto j = EGS(sect, sx, sy, sz, atwith, -127, sizx, sizy, sa, vel, zvel, actor, 4);
|
||||||
j->s.extra += (krand() & 7);
|
j->s->extra += (krand() & 7);
|
||||||
j->s.cstat = 128;
|
j->s->cstat = 128;
|
||||||
j->s.clipdist = 4;
|
j->s->clipdist = 4;
|
||||||
|
|
||||||
sa = s->ang + 32 - (krand() & 63);
|
sa = s->ang + 32 - (krand() & 63);
|
||||||
zvel = oldzvel + 512 - (krand() & 1023);
|
zvel = oldzvel + 512 - (krand() & 1023);
|
||||||
|
@ -832,7 +832,7 @@ static void shootwhip(DDukeActor* actor, int p, int sx, int sy, int sz, int sa,
|
||||||
|
|
||||||
void shoot_r(DDukeActor* actor, int atwith)
|
void shoot_r(DDukeActor* actor, int atwith)
|
||||||
{
|
{
|
||||||
spritetype* const s = &actor->s;
|
spritetype* const s = actor->s;
|
||||||
|
|
||||||
short sect, sa, p;
|
short sect, sa, p;
|
||||||
int sx, sy, sz, vel, zvel, x;
|
int sx, sy, sz, vel, zvel, x;
|
||||||
|
@ -900,17 +900,17 @@ void shoot_r(DDukeActor* actor, int atwith)
|
||||||
case TRIPBOMBSPRITE:
|
case TRIPBOMBSPRITE:
|
||||||
{
|
{
|
||||||
auto j = spawn(actor, atwith);
|
auto j = spawn(actor, atwith);
|
||||||
j->s.xvel = 32;
|
j->s->xvel = 32;
|
||||||
j->s.ang = s->ang;
|
j->s->ang = s->ang;
|
||||||
j->s.z -= (5 << 8);
|
j->s->z -= (5 << 8);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case BOWLINGBALL:
|
case BOWLINGBALL:
|
||||||
{
|
{
|
||||||
auto j = spawn(actor, atwith);
|
auto j = spawn(actor, atwith);
|
||||||
j->s.xvel = 250;
|
j->s->xvel = 250;
|
||||||
j->s.ang = s->ang;
|
j->s->ang = s->ang;
|
||||||
j->s.z -= (15 << 8);
|
j->s->z -= (15 << 8);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case OWHIP:
|
case OWHIP:
|
||||||
|
@ -978,7 +978,7 @@ void selectweapon_r(int snum, int weap)
|
||||||
{
|
{
|
||||||
int i, j, k;
|
int i, j, k;
|
||||||
auto p = &ps[snum];
|
auto p = &ps[snum];
|
||||||
if (p->last_pissed_time <= (26 * 218) && p->show_empty_weapon == 0 && p->kickback_pic == 0 && p->quick_kick == 0 && p->GetActor()->s.xrepeat > 8 && p->access_incs == 0 && p->knee_incs == 0)
|
if (p->last_pissed_time <= (26 * 218) && p->show_empty_weapon == 0 && p->kickback_pic == 0 && p->quick_kick == 0 && p->GetActor()->s->xrepeat > 8 && p->access_incs == 0 && p->knee_incs == 0)
|
||||||
{
|
{
|
||||||
if ((p->weapon_pos == 0 || (p->holster_weapon && p->weapon_pos == -9)))
|
if ((p->weapon_pos == 0 || (p->holster_weapon && p->weapon_pos == -9)))
|
||||||
{
|
{
|
||||||
|
@ -1085,7 +1085,7 @@ void selectweapon_r(int snum, int weap)
|
||||||
DukeStatIterator it(STAT_ACTOR);
|
DukeStatIterator it(STAT_ACTOR);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
if (act->s.picnum == HEAVYHBOMB && act->GetOwner() == p->GetActor())
|
if (act->s->picnum == HEAVYHBOMB && act->GetOwner() == p->GetActor())
|
||||||
{
|
{
|
||||||
p->gotweapon.Set(DYNAMITE_WEAPON);
|
p->gotweapon.Set(DYNAMITE_WEAPON);
|
||||||
j = THROWINGDYNAMITE_WEAPON;
|
j = THROWINGDYNAMITE_WEAPON;
|
||||||
|
@ -1250,7 +1250,7 @@ int doincrements_r(struct player_struct* p)
|
||||||
{
|
{
|
||||||
BellTime--;
|
BellTime--;
|
||||||
if (BellTime == 0 && BellSprite)
|
if (BellTime == 0 && BellSprite)
|
||||||
BellSprite->s.picnum++;
|
BellSprite->s->picnum++;
|
||||||
}
|
}
|
||||||
if (chickenphase > 0)
|
if (chickenphase > 0)
|
||||||
chickenphase--;
|
chickenphase--;
|
||||||
|
@ -1262,7 +1262,7 @@ int doincrements_r(struct player_struct* p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
snum = p->GetActor()->s.yvel;
|
snum = p->GetActor()->s->yvel;
|
||||||
|
|
||||||
p->player_par++;
|
p->player_par++;
|
||||||
if (p->yehaa_timer)
|
if (p->yehaa_timer)
|
||||||
|
@ -1389,17 +1389,17 @@ int doincrements_r(struct player_struct* p)
|
||||||
S_PlayActorSound(DUKE_TAKEPILLS, pact);
|
S_PlayActorSound(DUKE_TAKEPILLS, pact);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p->access_incs && p->GetActor()->s.pal != 1)
|
if (p->access_incs && p->GetActor()->s->pal != 1)
|
||||||
{
|
{
|
||||||
p->access_incs++;
|
p->access_incs++;
|
||||||
if (p->GetActor()->s.extra <= 0)
|
if (p->GetActor()->s->extra <= 0)
|
||||||
p->access_incs = 12;
|
p->access_incs = 12;
|
||||||
if (p->access_incs == 12)
|
if (p->access_incs == 12)
|
||||||
{
|
{
|
||||||
if (p->access_spritenum != nullptr)
|
if (p->access_spritenum != nullptr)
|
||||||
{
|
{
|
||||||
fi.checkhitswitch(snum, -1, p->access_spritenum);
|
fi.checkhitswitch(snum, -1, p->access_spritenum);
|
||||||
switch (p->access_spritenum->s.pal)
|
switch (p->access_spritenum->s->pal)
|
||||||
{
|
{
|
||||||
case 0:p->keys[1] = 1; break;
|
case 0:p->keys[1] = 1; break;
|
||||||
case 21:p->keys[2] = 1; break;
|
case 21:p->keys[2] = 1; break;
|
||||||
|
@ -1519,7 +1519,7 @@ void checkweapons_r(struct player_struct* p)
|
||||||
if (p->OnMotorcycle && numplayers > 1)
|
if (p->OnMotorcycle && numplayers > 1)
|
||||||
{
|
{
|
||||||
auto j = spawn(p->GetActor(), 7220);
|
auto j = spawn(p->GetActor(), 7220);
|
||||||
j->s.ang = p->angle.ang.asbuild();
|
j->s->ang = p->angle.ang.asbuild();
|
||||||
j->saved_ammo = p->ammo_amount[MOTORCYCLE_WEAPON];
|
j->saved_ammo = p->ammo_amount[MOTORCYCLE_WEAPON];
|
||||||
p->OnMotorcycle = 0;
|
p->OnMotorcycle = 0;
|
||||||
p->gotweapon.Clear(MOTORCYCLE_WEAPON);
|
p->gotweapon.Clear(MOTORCYCLE_WEAPON);
|
||||||
|
@ -1535,7 +1535,7 @@ void checkweapons_r(struct player_struct* p)
|
||||||
else if (p->OnBoat && numplayers > 1)
|
else if (p->OnBoat && numplayers > 1)
|
||||||
{
|
{
|
||||||
auto j = spawn(p->GetActor(), 7233);
|
auto j = spawn(p->GetActor(), 7233);
|
||||||
j->s.ang = p->angle.ang.asbuild();
|
j->s->ang = p->angle.ang.asbuild();
|
||||||
j->saved_ammo = p->ammo_amount[BOAT_WEAPON];
|
j->saved_ammo = p->ammo_amount[BOAT_WEAPON];
|
||||||
p->OnBoat = 0;
|
p->OnBoat = 0;
|
||||||
p->gotweapon.Clear(BOAT_WEAPON);
|
p->gotweapon.Clear(BOAT_WEAPON);
|
||||||
|
@ -1573,16 +1573,16 @@ void checkweapons_r(struct player_struct* p)
|
||||||
switch (i)
|
switch (i)
|
||||||
{
|
{
|
||||||
case 1:
|
case 1:
|
||||||
j->s.lotag = 100;
|
j->s->lotag = 100;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
j->s.lotag = 101;
|
j->s->lotag = 101;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
j->s.lotag = 102;
|
j->s->lotag = 102;
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
j->s.lotag = 103;
|
j->s->lotag = 103;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2073,7 +2073,7 @@ static void movement(int snum, ESyncBits actions, int psect, int fz, int cz, int
|
||||||
{
|
{
|
||||||
auto p = &ps[snum];
|
auto p = &ps[snum];
|
||||||
auto pact = p->GetActor();
|
auto pact = p->GetActor();
|
||||||
auto s = &pact->s;
|
auto s = pact->s;
|
||||||
|
|
||||||
if (p->airleft != 15 * 26)
|
if (p->airleft != 15 * 26)
|
||||||
p->airleft = 15 * 26; //Aprox twenty seconds.
|
p->airleft = 15 * 26; //Aprox twenty seconds.
|
||||||
|
@ -2358,12 +2358,12 @@ static void underwater(int snum, ESyncBits actions, int psect, int fz, int cz)
|
||||||
if (p->scuba_on && (krand() & 255) < 8)
|
if (p->scuba_on && (krand() & 255) < 8)
|
||||||
{
|
{
|
||||||
auto j = spawn(pact, WATERBUBBLE);
|
auto j = spawn(pact, WATERBUBBLE);
|
||||||
j->s.x += bcos(p->angle.ang.asbuild() + 64 - (global_random & 128) + 128, -6);
|
j->s->x += bcos(p->angle.ang.asbuild() + 64 - (global_random & 128) + 128, -6);
|
||||||
j->s.y += bsin(p->angle.ang.asbuild() + 64 - (global_random & 128) + 128, -6);
|
j->s->y += bsin(p->angle.ang.asbuild() + 64 - (global_random & 128) + 128, -6);
|
||||||
j->s.xrepeat = 3;
|
j->s->xrepeat = 3;
|
||||||
j->s.yrepeat = 2;
|
j->s->yrepeat = 2;
|
||||||
j->s.z = p->posz + (8 << 8);
|
j->s->z = p->posz + (8 << 8);
|
||||||
j->s.cstat = 514;
|
j->s->cstat = 514;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2377,7 +2377,7 @@ void onMotorcycleMove(int snum, int psect, int j)
|
||||||
{
|
{
|
||||||
auto p = &ps[snum];
|
auto p = &ps[snum];
|
||||||
auto pact = p->GetActor();
|
auto pact = p->GetActor();
|
||||||
auto s = &pact->s;
|
auto s = pact->s;
|
||||||
int psectlotag = sector[psect].lotag;
|
int psectlotag = sector[psect].lotag;
|
||||||
short angleDelta = abs(p->angle.ang.asbuild() - getangle(wall[wall[j].point2].x - wall[j].x, wall[wall[j].point2].y - wall[j].y));
|
short angleDelta = abs(p->angle.ang.asbuild() - getangle(wall[wall[j].point2].x - wall[j].x, wall[wall[j].point2].y - wall[j].y));
|
||||||
short damageAmount;
|
short damageAmount;
|
||||||
|
@ -2474,7 +2474,7 @@ void onBoatMove(int snum, int psect, int j)
|
||||||
void onMotorcycleHit(int snum, DDukeActor* victim)
|
void onMotorcycleHit(int snum, DDukeActor* victim)
|
||||||
{
|
{
|
||||||
auto p = &ps[snum];
|
auto p = &ps[snum];
|
||||||
auto s = &victim->s;
|
auto s = victim->s;
|
||||||
if (badguy(s) || s->picnum == APLAYER)
|
if (badguy(s) || s->picnum == APLAYER)
|
||||||
{
|
{
|
||||||
if (s->picnum != APLAYER)
|
if (s->picnum != APLAYER)
|
||||||
|
@ -2504,7 +2504,7 @@ void onMotorcycleHit(int snum, DDukeActor* victim)
|
||||||
DukeSpriteIterator it;
|
DukeSpriteIterator it;
|
||||||
while (auto act2 = it.Next())
|
while (auto act2 = it.Next())
|
||||||
{
|
{
|
||||||
auto sprj = &act2->s;
|
auto sprj = act2->s;
|
||||||
if ((sprj->picnum == RRTILE2431 || sprj->picnum == RRTILE2451) && sprj->pal == 4)
|
if ((sprj->picnum == RRTILE2431 || sprj->picnum == RRTILE2451) && sprj->pal == 4)
|
||||||
{
|
{
|
||||||
if (s->lotag == sprj->lotag)
|
if (s->lotag == sprj->lotag)
|
||||||
|
@ -2535,7 +2535,7 @@ void onMotorcycleHit(int snum, DDukeActor* victim)
|
||||||
void onBoatHit(int snum, DDukeActor* victim)
|
void onBoatHit(int snum, DDukeActor* victim)
|
||||||
{
|
{
|
||||||
auto p = &ps[snum];
|
auto p = &ps[snum];
|
||||||
auto s = &victim->s;
|
auto s = victim->s;
|
||||||
|
|
||||||
if (badguy(s) || s->picnum == APLAYER)
|
if (badguy(s) || s->picnum == APLAYER)
|
||||||
{
|
{
|
||||||
|
@ -2765,16 +2765,16 @@ static void operateweapon(int snum, ESyncBits actions, int psect)
|
||||||
|
|
||||||
if (k == 15)
|
if (k == 15)
|
||||||
{
|
{
|
||||||
spawned->s.yvel = 3;
|
spawned->s->yvel = 3;
|
||||||
spawned->s.z += (8 << 8);
|
spawned->s->z += (8 << 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
k = hits(p->GetActor());
|
k = hits(p->GetActor());
|
||||||
if (k < 512)
|
if (k < 512)
|
||||||
{
|
{
|
||||||
spawned->s.ang += 1024;
|
spawned->s->ang += 1024;
|
||||||
spawned->s.zvel /= 3;
|
spawned->s->zvel /= 3;
|
||||||
spawned->s.xvel /= 3;
|
spawned->s->xvel /= 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
p->hbomb_on = 1;
|
p->hbomb_on = 1;
|
||||||
|
@ -2985,10 +2985,10 @@ static void operateweapon(int snum, ESyncBits actions, int psect)
|
||||||
{
|
{
|
||||||
auto j = spawn(pact, SHELL);
|
auto j = spawn(pact, SHELL);
|
||||||
|
|
||||||
j->s.ang += 1024;
|
j->s->ang += 1024;
|
||||||
j->s.ang &= 2047;
|
j->s->ang &= 2047;
|
||||||
j->s.xvel += 32;
|
j->s->xvel += 32;
|
||||||
j->s.z += (3 << 8);
|
j->s->z += (3 << 8);
|
||||||
ssp(j, CLIPMASK0);
|
ssp(j, CLIPMASK0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3291,7 +3291,7 @@ static void processweapon(int snum, ESyncBits actions, int psect)
|
||||||
{
|
{
|
||||||
auto p = &ps[snum];
|
auto p = &ps[snum];
|
||||||
auto pact = p->GetActor();
|
auto pact = p->GetActor();
|
||||||
auto s = &pact->s;
|
auto s = pact->s;
|
||||||
int shrunk = (s->yrepeat < 8);
|
int shrunk = (s->yrepeat < 8);
|
||||||
|
|
||||||
if (actions & SB_FIRE)
|
if (actions & SB_FIRE)
|
||||||
|
@ -3358,7 +3358,7 @@ void processinput_r(int snum)
|
||||||
|
|
||||||
auto p = &ps[snum];
|
auto p = &ps[snum];
|
||||||
auto pact = p->GetActor();
|
auto pact = p->GetActor();
|
||||||
auto s = &pact->s;
|
auto s = pact->s;
|
||||||
|
|
||||||
p->horizon.resetadjustment();
|
p->horizon.resetadjustment();
|
||||||
p->angle.resetadjustment();
|
p->angle.resetadjustment();
|
||||||
|
@ -3395,8 +3395,8 @@ void processinput_r(int snum)
|
||||||
DukeSectIterator it(psect);
|
DukeSectIterator it(psect);
|
||||||
while (auto act2 = it.Next())
|
while (auto act2 = it.Next())
|
||||||
{
|
{
|
||||||
if (act2->s.picnum == RRTILE380)
|
if (act2->s->picnum == RRTILE380)
|
||||||
if (act2->s.z - (8 << 8) < p->posz)
|
if (act2->s->z - (8 << 8) < p->posz)
|
||||||
psectlotag = 2;
|
psectlotag = 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3445,13 +3445,13 @@ void processinput_r(int snum)
|
||||||
|
|
||||||
if (chz.type == kHitSprite)
|
if (chz.type == kHitSprite)
|
||||||
{
|
{
|
||||||
if (chz.actor->s.statnum == 1 && chz.actor->s.extra >= 0)
|
if (chz.actor->s->statnum == 1 && chz.actor->s->extra >= 0)
|
||||||
{
|
{
|
||||||
chz.type = kHitNone;
|
chz.type = kHitNone;
|
||||||
chz.actor = nullptr;
|
chz.actor = nullptr;
|
||||||
cz = p->truecz;
|
cz = p->truecz;
|
||||||
}
|
}
|
||||||
else if (chz.actor->s.picnum == RRTILE3587)
|
else if (chz.actor->s->picnum == RRTILE3587)
|
||||||
{
|
{
|
||||||
if (!p->stairs)
|
if (!p->stairs)
|
||||||
{
|
{
|
||||||
|
@ -3470,7 +3470,7 @@ void processinput_r(int snum)
|
||||||
|
|
||||||
if (clz.type == kHitSprite)
|
if (clz.type == kHitSprite)
|
||||||
{
|
{
|
||||||
if ((clz.actor->s.cstat & 33) == 33)
|
if ((clz.actor->s->cstat & 33) == 33)
|
||||||
{
|
{
|
||||||
psectlotag = 0;
|
psectlotag = 0;
|
||||||
p->footprintcount = 0;
|
p->footprintcount = 0;
|
||||||
|
@ -3492,29 +3492,29 @@ void processinput_r(int snum)
|
||||||
p->MotoSpeed -= p->MotoSpeed / 16.;
|
p->MotoSpeed -= p->MotoSpeed / 16.;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (badguy(clz.actor) && clz.actor->s.xrepeat > 24 && abs(s->z - clz.actor->s.z) < (84 << 8))
|
else if (badguy(clz.actor) && clz.actor->s->xrepeat > 24 && abs(s->z - clz.actor->s->z) < (84 << 8))
|
||||||
{
|
{
|
||||||
int j = getangle(clz.actor->s.x - p->posx, clz.actor->s.y - p->posy);
|
int j = getangle(clz.actor->s->x - p->posx, clz.actor->s->y - p->posy);
|
||||||
p->posxv -= bcos(j, 4);
|
p->posxv -= bcos(j, 4);
|
||||||
p->posyv -= bsin(j, 4);
|
p->posyv -= bsin(j, 4);
|
||||||
}
|
}
|
||||||
if (clz.actor->s.picnum == RRTILE3587)
|
if (clz.actor->s->picnum == RRTILE3587)
|
||||||
{
|
{
|
||||||
if (!p->stairs)
|
if (!p->stairs)
|
||||||
{
|
{
|
||||||
p->stairs = 10;
|
p->stairs = 10;
|
||||||
if ((actions & SB_CROUCH) && !p->OnMotorcycle)
|
if ((actions & SB_CROUCH) && !p->OnMotorcycle)
|
||||||
{
|
{
|
||||||
cz = clz.actor->s.z;
|
cz = clz.actor->s->z;
|
||||||
chz.type = kHitNone;
|
chz.type = kHitNone;
|
||||||
chz.actor = nullptr;
|
chz.actor = nullptr;
|
||||||
fz = clz.actor->s.z + (4 << 8);
|
fz = clz.actor->s->z + (4 << 8);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
p->stairs--;
|
p->stairs--;
|
||||||
}
|
}
|
||||||
else if (clz.actor->s.picnum == TOILET || clz.actor->s.picnum == RRTILE2121)
|
else if (clz.actor->s->picnum == TOILET || clz.actor->s->picnum == RRTILE2121)
|
||||||
{
|
{
|
||||||
if ((actions & SB_CROUCH) && !p->OnMotorcycle)
|
if ((actions & SB_CROUCH) && !p->OnMotorcycle)
|
||||||
//if (Sound[436].num == 0)
|
//if (Sound[436].num == 0)
|
||||||
|
@ -3586,7 +3586,7 @@ void processinput_r(int snum)
|
||||||
p->playerweaponsway(s->xvel);
|
p->playerweaponsway(s->xvel);
|
||||||
|
|
||||||
s->xvel = clamp(ksqrt((p->posx - p->bobposx) * (p->posx - p->bobposx) + (p->posy - p->bobposy) * (p->posy - p->bobposy)), 0, 512);
|
s->xvel = clamp(ksqrt((p->posx - p->bobposx) * (p->posx - p->bobposx) + (p->posy - p->bobposy) * (p->posy - p->bobposy)), 0, 512);
|
||||||
if (p->on_ground) p->bobcounter += p->GetActor()->s.xvel >> 1;
|
if (p->on_ground) p->bobcounter += p->GetActor()->s->xvel >> 1;
|
||||||
|
|
||||||
p->backuppos(ud.clipping == 0 && (sector[p->cursectnum].floorpicnum == MIRROR || p->cursectnum < 0 || p->cursectnum >= MAXSECTORS));
|
p->backuppos(ud.clipping == 0 && (sector[p->cursectnum].floorpicnum == MIRROR || p->cursectnum < 0 || p->cursectnum >= MAXSECTORS));
|
||||||
|
|
||||||
|
@ -3694,7 +3694,7 @@ void processinput_r(int snum)
|
||||||
case 0:
|
case 0:
|
||||||
|
|
||||||
if (clz.type == kHitSprite)
|
if (clz.type == kHitSprite)
|
||||||
j = clz.actor->s.picnum;
|
j = clz.actor->s->picnum;
|
||||||
else j = sector[psect].floorpicnum;
|
else j = sector[psect].floorpicnum;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
|
@ -3858,33 +3858,33 @@ HORIZONLY:
|
||||||
}
|
}
|
||||||
else if (badguy(clip.actor))
|
else if (badguy(clip.actor))
|
||||||
{
|
{
|
||||||
if (clip.actor->s.statnum != 1)
|
if (clip.actor->s->statnum != 1)
|
||||||
{
|
{
|
||||||
clip.actor->timetosleep = 0;
|
clip.actor->timetosleep = 0;
|
||||||
if (clip.actor->s.picnum == BILLYRAY)
|
if (clip.actor->s->picnum == BILLYRAY)
|
||||||
S_PlayActorSound(404, clip.actor);
|
S_PlayActorSound(404, clip.actor);
|
||||||
else
|
else
|
||||||
check_fta_sounds_r(clip.actor);
|
check_fta_sounds_r(clip.actor);
|
||||||
changespritestat(clip.actor, 1);
|
changespritestat(clip.actor, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!isRRRA() && clip.actor->s.picnum == RRTILE3410)
|
else if (!isRRRA() && clip.actor->s->picnum == RRTILE3410)
|
||||||
{
|
{
|
||||||
quickkill(p);
|
quickkill(p);
|
||||||
S_PlayActorSound(446, pact);
|
S_PlayActorSound(446, pact);
|
||||||
}
|
}
|
||||||
if (isRRRA())
|
if (isRRRA())
|
||||||
{
|
{
|
||||||
if (clip.actor->s.picnum == RRTILE3410)
|
if (clip.actor->s->picnum == RRTILE3410)
|
||||||
{
|
{
|
||||||
quickkill(p);
|
quickkill(p);
|
||||||
S_PlayActorSound(446, pact);
|
S_PlayActorSound(446, pact);
|
||||||
}
|
}
|
||||||
else if (clip.actor->s.picnum == RRTILE2443 && clip.actor->s.pal == 19)
|
else if (clip.actor->s->picnum == RRTILE2443 && clip.actor->s->pal == 19)
|
||||||
{
|
{
|
||||||
clip.actor->s.pal = 0;
|
clip.actor->s->pal = 0;
|
||||||
p->DrugMode = 5;
|
p->DrugMode = 5;
|
||||||
ps[snum].GetActor()->s.extra = gs.max_player_health;
|
ps[snum].GetActor()->s->extra = gs.max_player_health;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3921,7 +3921,7 @@ HORIZONLY:
|
||||||
if (ud.clipping == 0 && sector[psect].lotag == ST_31_TWO_WAY_TRAIN)
|
if (ud.clipping == 0 && sector[psect].lotag == ST_31_TWO_WAY_TRAIN)
|
||||||
{
|
{
|
||||||
auto act = ScriptIndexToActor(sector[psect].hitag);
|
auto act = ScriptIndexToActor(sector[psect].hitag);
|
||||||
if (act && act->s.xvel && act->temp_data[0] == 0)
|
if (act && act->s->xvel && act->temp_data[0] == 0)
|
||||||
{
|
{
|
||||||
quickkill(p);
|
quickkill(p);
|
||||||
return;
|
return;
|
||||||
|
@ -4072,9 +4072,9 @@ void OnMotorcycle(struct player_struct *p, DDukeActor* motosprite)
|
||||||
{
|
{
|
||||||
if (motosprite)
|
if (motosprite)
|
||||||
{
|
{
|
||||||
p->posx = motosprite->s.x;
|
p->posx = motosprite->s->x;
|
||||||
p->posy = motosprite->s.y;
|
p->posy = motosprite->s->y;
|
||||||
p->angle.ang = buildang(motosprite->s.ang);
|
p->angle.ang = buildang(motosprite->s->ang);
|
||||||
p->ammo_amount[MOTORCYCLE_WEAPON] = motosprite->saved_ammo;
|
p->ammo_amount[MOTORCYCLE_WEAPON] = motosprite->saved_ammo;
|
||||||
deletesprite(motosprite);
|
deletesprite(motosprite);
|
||||||
}
|
}
|
||||||
|
@ -4130,9 +4130,9 @@ void OffMotorcycle(struct player_struct *p)
|
||||||
p->posyv -= p->angle.ang.bsin(7);
|
p->posyv -= p->angle.ang.bsin(7);
|
||||||
p->moto_underwater = 0;
|
p->moto_underwater = 0;
|
||||||
auto spawned = spawn(p->GetActor(), EMPTYBIKE);
|
auto spawned = spawn(p->GetActor(), EMPTYBIKE);
|
||||||
spawned->s.ang = p->angle.ang.asbuild();
|
spawned->s->ang = p->angle.ang.asbuild();
|
||||||
spawned->s.xvel += p->angle.ang.bcos(7);
|
spawned->s->xvel += p->angle.ang.bcos(7);
|
||||||
spawned->s.yvel += p->angle.ang.bsin(7);
|
spawned->s->yvel += p->angle.ang.bsin(7);
|
||||||
spawned->saved_ammo = p->ammo_amount[MOTORCYCLE_WEAPON];
|
spawned->saved_ammo = p->ammo_amount[MOTORCYCLE_WEAPON];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4149,9 +4149,9 @@ void OnBoat(struct player_struct *p, DDukeActor* boat)
|
||||||
{
|
{
|
||||||
if (boat)
|
if (boat)
|
||||||
{
|
{
|
||||||
p->posx = boat->s.x;
|
p->posx = boat->s->x;
|
||||||
p->posy = boat->s.y;
|
p->posy = boat->s->y;
|
||||||
p->angle.ang = buildang(boat->s.ang);
|
p->angle.ang = buildang(boat->s->ang);
|
||||||
p->ammo_amount[BOAT_WEAPON] = boat->saved_ammo;
|
p->ammo_amount[BOAT_WEAPON] = boat->saved_ammo;
|
||||||
deletesprite(boat);
|
deletesprite(boat);
|
||||||
}
|
}
|
||||||
|
@ -4194,9 +4194,9 @@ void OffBoat(struct player_struct *p)
|
||||||
p->posyv -= p->angle.ang.bsin(7);
|
p->posyv -= p->angle.ang.bsin(7);
|
||||||
p->moto_underwater = 0;
|
p->moto_underwater = 0;
|
||||||
auto spawned = spawn(p->GetActor(), EMPTYBOAT);
|
auto spawned = spawn(p->GetActor(), EMPTYBOAT);
|
||||||
spawned->s.ang = p->angle.ang.asbuild();
|
spawned->s->ang = p->angle.ang.asbuild();
|
||||||
spawned->s.xvel += p->angle.ang.bcos(7);
|
spawned->s->xvel += p->angle.ang.bcos(7);
|
||||||
spawned->s.yvel += p->angle.ang.bsin(7);
|
spawned->s->yvel += p->angle.ang.bsin(7);
|
||||||
spawned->saved_ammo = p->ammo_amount[BOAT_WEAPON];
|
spawned->saved_ammo = p->ammo_amount[BOAT_WEAPON];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -116,18 +116,18 @@ void DoSpawn(struct player_struct *p, short snum)
|
||||||
if((aplWeaponFlags[p->curr_weapon][snum] & WEAPON_FLAG_SPAWNTYPE2 ) )
|
if((aplWeaponFlags[p->curr_weapon][snum] & WEAPON_FLAG_SPAWNTYPE2 ) )
|
||||||
{
|
{
|
||||||
// like shotgun shells
|
// like shotgun shells
|
||||||
j->s.ang += 1024;
|
j->s->ang += 1024;
|
||||||
ssp(j,CLIPMASK0);
|
ssp(j,CLIPMASK0);
|
||||||
j->s.ang += 1024;
|
j->s->ang += 1024;
|
||||||
// p->kickback_pic++;
|
// p->kickback_pic++;
|
||||||
}
|
}
|
||||||
else if((aplWeaponFlags[p->curr_weapon][snum] & WEAPON_FLAG_SPAWNTYPE3 ) )
|
else if((aplWeaponFlags[p->curr_weapon][snum] & WEAPON_FLAG_SPAWNTYPE3 ) )
|
||||||
{
|
{
|
||||||
// like chaingun shells
|
// like chaingun shells
|
||||||
j->s.ang += 1024;
|
j->s->ang += 1024;
|
||||||
j->s.ang &= 2047;
|
j->s->ang &= 2047;
|
||||||
j->s.xvel += 32;
|
j->s->xvel += 32;
|
||||||
j->s.z += (3<<8);
|
j->s->z += (3<<8);
|
||||||
ssp(j,CLIPMASK0);
|
ssp(j,CLIPMASK0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -351,23 +351,23 @@ void operateweapon_ww(int snum, ESyncBits actions, int psect)
|
||||||
int lGrenadeLifetime = GetGameVar("GRENADE_LIFETIME", NAM_GRENADE_LIFETIME, nullptr, snum);
|
int lGrenadeLifetime = GetGameVar("GRENADE_LIFETIME", NAM_GRENADE_LIFETIME, nullptr, snum);
|
||||||
int lGrenadeLifetimeVar = GetGameVar("GRENADE_LIFETIME_VAR", NAM_GRENADE_LIFETIME_VAR, nullptr, snum);
|
int lGrenadeLifetimeVar = GetGameVar("GRENADE_LIFETIME_VAR", NAM_GRENADE_LIFETIME_VAR, nullptr, snum);
|
||||||
// set timer. blows up when at zero....
|
// set timer. blows up when at zero....
|
||||||
j->s.extra = lGrenadeLifetime
|
j->s->extra = lGrenadeLifetime
|
||||||
+ MulScale(krand(), lGrenadeLifetimeVar, 14)
|
+ MulScale(krand(), lGrenadeLifetimeVar, 14)
|
||||||
- lGrenadeLifetimeVar;
|
- lGrenadeLifetimeVar;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (k == 15)
|
if (k == 15)
|
||||||
{
|
{
|
||||||
j->s.yvel = 3;
|
j->s->yvel = 3;
|
||||||
j->s.z += (8 << 8);
|
j->s->z += (8 << 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
k = hits(p->GetActor());
|
k = hits(p->GetActor());
|
||||||
if (k < 512)
|
if (k < 512)
|
||||||
{
|
{
|
||||||
j->s.ang += 1024;
|
j->s->ang += 1024;
|
||||||
j->s.zvel /= 3;
|
j->s->zvel /= 3;
|
||||||
j->s.xvel /= 3;
|
j->s->xvel /= 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
p->hbomb_on = 1;
|
p->hbomb_on = 1;
|
||||||
|
|
|
@ -570,7 +570,7 @@ void resetpspritevars(int g)
|
||||||
DukeStatIterator it(STAT_PLAYER);
|
DukeStatIterator it(STAT_PLAYER);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
s = &act->s;
|
s = act->s;
|
||||||
|
|
||||||
if (numplayersprites == MAXPLAYERS)
|
if (numplayersprites == MAXPLAYERS)
|
||||||
I_Error("Too many player sprites (max 16.)");
|
I_Error("Too many player sprites (max 16.)");
|
||||||
|
@ -947,7 +947,7 @@ void enterlevel(MapRecord *mi, int gamemode)
|
||||||
|
|
||||||
for (int i = connecthead; i >= 0; i = connectpoint2[i])
|
for (int i = connecthead; i >= 0; i = connectpoint2[i])
|
||||||
{
|
{
|
||||||
int pn = sector[ps[i].GetActor()->s.sectnum].floorpicnum;
|
int pn = sector[ps[i].GetActor()->s->sectnum].floorpicnum;
|
||||||
if (pn == TILE_HURTRAIL || pn == TILE_FLOORSLIME || pn == TILE_FLOORPLASMA)
|
if (pn == TILE_HURTRAIL || pn == TILE_FLOORSLIME || pn == TILE_FLOORPLASMA)
|
||||||
{
|
{
|
||||||
resetweapons(i);
|
resetweapons(i);
|
||||||
|
|
|
@ -256,8 +256,8 @@ void cacheit_d(void)
|
||||||
DukeSectIterator it(i);
|
DukeSectIterator it(i);
|
||||||
while (auto j = it.Next())
|
while (auto j = it.Next())
|
||||||
{
|
{
|
||||||
if (j->s.xrepeat != 0 && j->s.yrepeat != 0 && (j->s.cstat & 32768) == 0)
|
if (j->s->xrepeat != 0 && j->s->yrepeat != 0 && (j->s->cstat & 32768) == 0)
|
||||||
cachespritenum(&j->s);
|
cachespritenum(j->s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -280,7 +280,7 @@ void prelevel_d(int g)
|
||||||
DukeStatIterator it(STAT_DEFAULT);
|
DukeStatIterator it(STAT_DEFAULT);
|
||||||
while (auto ac = it.Next())
|
while (auto ac = it.Next())
|
||||||
{
|
{
|
||||||
auto si = &ac->s;
|
auto si = ac->s;
|
||||||
LoadActor(ac, -1, -1);
|
LoadActor(ac, -1, -1);
|
||||||
|
|
||||||
if (si->lotag == -1 && (si->cstat & 16))
|
if (si->lotag == -1 && (si->cstat & 16))
|
||||||
|
@ -366,7 +366,7 @@ void prelevel_d(int g)
|
||||||
DukeStatIterator it1(STAT_EFFECTOR);
|
DukeStatIterator it1(STAT_EFFECTOR);
|
||||||
while (auto ac = it1.Next())
|
while (auto ac = it1.Next())
|
||||||
{
|
{
|
||||||
if (ac->s.lotag == 12 && ac->s.hitag == spr->lotag)
|
if (ac->s->lotag == 12 && ac->s->hitag == spr->lotag)
|
||||||
ac->temp_data[0] = 1;
|
ac->temp_data[0] = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -431,8 +431,8 @@ void cacheit_r(void)
|
||||||
DukeSectIterator it(i);
|
DukeSectIterator it(i);
|
||||||
while (auto j = it.Next())
|
while (auto j = it.Next())
|
||||||
{
|
{
|
||||||
if(j->s.xrepeat != 0 && j->s.yrepeat != 0 && (j->s.cstat&32768) == 0)
|
if(j->s->xrepeat != 0 && j->s->yrepeat != 0 && (j->s->cstat&32768) == 0)
|
||||||
cachespritenum(&j->s);
|
cachespritenum(j->s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
precacheMarkedTiles();
|
precacheMarkedTiles();
|
||||||
|
@ -499,7 +499,7 @@ void prelevel_r(int g)
|
||||||
DukeSectIterator it(i);
|
DukeSectIterator it(i);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
auto spr = &act->s;
|
auto spr = act->s;
|
||||||
if (spr->picnum == RRTILE11)
|
if (spr->picnum == RRTILE11)
|
||||||
{
|
{
|
||||||
dist = spr->lotag << 4;
|
dist = spr->lotag << 4;
|
||||||
|
@ -530,7 +530,7 @@ void prelevel_r(int g)
|
||||||
DukeSectIterator it(i);
|
DukeSectIterator it(i);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
auto sj = &act->s;
|
auto sj = act->s;
|
||||||
if (sj->picnum == RRTILE64)
|
if (sj->picnum == RRTILE64)
|
||||||
{
|
{
|
||||||
dist = sj->lotag << 4;
|
dist = sj->lotag << 4;
|
||||||
|
@ -562,7 +562,7 @@ void prelevel_r(int g)
|
||||||
DukeStatIterator it(STAT_DEFAULT);
|
DukeStatIterator it(STAT_DEFAULT);
|
||||||
while (auto ac = it.Next())
|
while (auto ac = it.Next())
|
||||||
{
|
{
|
||||||
auto si = &ac->s;
|
auto si = ac->s;
|
||||||
LoadActor(ac, -1, -1);
|
LoadActor(ac, -1, -1);
|
||||||
|
|
||||||
if (si->lotag == -1 && (si->cstat & 16))
|
if (si->lotag == -1 && (si->cstat & 16))
|
||||||
|
@ -698,7 +698,7 @@ void prelevel_r(int g)
|
||||||
it.Reset(STAT_DEFAULT);
|
it.Reset(STAT_DEFAULT);
|
||||||
while (auto ac = it.Next())
|
while (auto ac = it.Next())
|
||||||
{
|
{
|
||||||
auto spr = &ac->s;
|
auto spr = ac->s;
|
||||||
switch (spr->picnum)
|
switch (spr->picnum)
|
||||||
{
|
{
|
||||||
case RRTILE8464 + 1:
|
case RRTILE8464 + 1:
|
||||||
|
@ -733,7 +733,7 @@ void prelevel_r(int g)
|
||||||
DukeStatIterator it1(STAT_EFFECTOR);
|
DukeStatIterator it1(STAT_EFFECTOR);
|
||||||
while (auto j = it1.Next())
|
while (auto j = it1.Next())
|
||||||
{
|
{
|
||||||
if (j->s.lotag == 12 && j->s.hitag == spr->lotag)
|
if (j->s->lotag == 12 && j->s->hitag == spr->lotag)
|
||||||
j->temp_data[0] = 1;
|
j->temp_data[0] = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -86,7 +86,7 @@ void SE40_Draw(int tag, spritetype *spr, int x, int y, int z, binangle a, fixedh
|
||||||
DukeStatIterator it(STAT_RAROR);
|
DukeStatIterator it(STAT_RAROR);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
auto spr = &act->s;
|
auto spr = act->s;
|
||||||
if (
|
if (
|
||||||
spr->picnum == SECTOREFFECTOR &&
|
spr->picnum == SECTOREFFECTOR &&
|
||||||
spr->lotag == fofmode &&
|
spr->lotag == fofmode &&
|
||||||
|
@ -106,7 +106,7 @@ void SE40_Draw(int tag, spritetype *spr, int x, int y, int z, binangle a, fixedh
|
||||||
it.Reset(STAT_RAROR);
|
it.Reset(STAT_RAROR);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
auto spr = &act->s;
|
auto spr = act->s;
|
||||||
if (
|
if (
|
||||||
spr->picnum == SECTOREFFECTOR &&
|
spr->picnum == SECTOREFFECTOR &&
|
||||||
spr->lotag == k &&
|
spr->lotag == k &&
|
||||||
|
@ -124,7 +124,7 @@ void SE40_Draw(int tag, spritetype *spr, int x, int y, int z, binangle a, fixedh
|
||||||
it.Reset(STAT_RAROR);
|
it.Reset(STAT_RAROR);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
auto spr = &act->s;
|
auto spr = act->s;
|
||||||
if (spr->picnum == SECTOREFFECTOR &&
|
if (spr->picnum == SECTOREFFECTOR &&
|
||||||
spr->lotag == k + 2 &&
|
spr->lotag == k + 2 &&
|
||||||
spr->hitag == floor1->hitag
|
spr->hitag == floor1->hitag
|
||||||
|
@ -157,7 +157,7 @@ void SE40_Draw(int tag, spritetype *spr, int x, int y, int z, binangle a, fixedh
|
||||||
it.Reset(STAT_RAROR);
|
it.Reset(STAT_RAROR);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
auto spr = &act->s;
|
auto spr = act->s;
|
||||||
if (spr->picnum == 1 &&
|
if (spr->picnum == 1 &&
|
||||||
spr->lotag == k + 2 &&
|
spr->lotag == k + 2 &&
|
||||||
spr->hitag == floor1->hitag
|
spr->hitag == floor1->hitag
|
||||||
|
@ -195,7 +195,7 @@ void se40code(int x, int y, int z, binangle a, fixedhoriz h, int smoothratio)
|
||||||
DukeStatIterator it(STAT_RAROR);
|
DukeStatIterator it(STAT_RAROR);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
switch (act->s.lotag - tag + 40)
|
switch (act->s->lotag - tag + 40)
|
||||||
{
|
{
|
||||||
// case 40:
|
// case 40:
|
||||||
// case 41:
|
// case 41:
|
||||||
|
@ -205,8 +205,8 @@ void se40code(int x, int y, int z, binangle a, fixedhoriz h, int smoothratio)
|
||||||
case 43:
|
case 43:
|
||||||
case 44:
|
case 44:
|
||||||
case 45:
|
case 45:
|
||||||
if (ps[screenpeek].cursectnum == act->s.sectnum)
|
if (ps[screenpeek].cursectnum == act->s->sectnum)
|
||||||
SE40_Draw(tag, &act->s, x, y, z, a, h, smoothratio);
|
SE40_Draw(tag, act->s, x, y, z, a, h, smoothratio);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -268,7 +268,7 @@ void animatecamsprite(double smoothratio)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
auto p = &ps[screenpeek];
|
auto p = &ps[screenpeek];
|
||||||
auto sp = &camsprite->s;
|
auto sp = camsprite->s;
|
||||||
|
|
||||||
if (p->newOwner != nullptr) camsprite->SetOwner(p->newOwner);
|
if (p->newOwner != nullptr) camsprite->SetOwner(p->newOwner);
|
||||||
|
|
||||||
|
@ -282,7 +282,7 @@ void animatecamsprite(double smoothratio)
|
||||||
|
|
||||||
screen->RenderTextureView(canvas, [=](IntRect& rect)
|
screen->RenderTextureView(canvas, [=](IntRect& rect)
|
||||||
{
|
{
|
||||||
auto camera = &camsprite->GetOwner()->s;
|
auto camera = camsprite->GetOwner()->s;
|
||||||
auto ang = buildang(camera->interpolatedang(smoothratio));
|
auto ang = buildang(camera->interpolatedang(smoothratio));
|
||||||
// Note: no ROR or camera here for now - the current setup has no means to detect these things before rendering the scene itself.
|
// Note: no ROR or camera here for now - the current setup has no means to detect these things before rendering the scene itself.
|
||||||
renderDrawRoomsQ16(camera->x, camera->y, camera->z, ang.asq16(), IntToFixed(camera->shade), camera->sectnum); // why 'shade'...?
|
renderDrawRoomsQ16(camera->x, camera->y, camera->z, ang.asq16(), IntToFixed(camera->shade), camera->sectnum); // why 'shade'...?
|
||||||
|
@ -400,7 +400,7 @@ static void geometryEffect(int cposx, int cposy, int cposz, binangle cang, fixed
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
changespritesect(act, geosectorwarp[gs]);
|
changespritesect(act, geosectorwarp[gs]);
|
||||||
setsprite(act, act->s.x -= geox[gs], act->s.y -= geoy[gs], act->s.z);
|
setsprite(act, act->s->x -= geox[gs], act->s->y -= geoy[gs], act->s->z);
|
||||||
}
|
}
|
||||||
if (geosector[gs] == sect)
|
if (geosector[gs] == sect)
|
||||||
{
|
{
|
||||||
|
@ -420,7 +420,7 @@ static void geometryEffect(int cposx, int cposy, int cposz, binangle cang, fixed
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
changespritesect(act, geosector[gs]);
|
changespritesect(act, geosector[gs]);
|
||||||
setsprite(act, act->s.x += geox[gs], act->s.y += geoy[gs], act->s.z);
|
setsprite(act, act->s->x += geox[gs], act->s->y += geoy[gs], act->s->z);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fi.animatesprites(cposx, cposy, cang.asbuild(), smoothratio);
|
fi.animatesprites(cposx, cposy, cang.asbuild(), smoothratio);
|
||||||
|
@ -432,7 +432,7 @@ static void geometryEffect(int cposx, int cposy, int cposz, binangle cang, fixed
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
changespritesect(act, geosectorwarp2[gs]);
|
changespritesect(act, geosectorwarp2[gs]);
|
||||||
setsprite(act, act->s.x -= geox2[gs], act->s.y -= geoy2[gs], act->s.z);
|
setsprite(act, act->s->x -= geox2[gs], act->s->y -= geoy2[gs], act->s->z);
|
||||||
}
|
}
|
||||||
if (geosector[gs] == sect)
|
if (geosector[gs] == sect)
|
||||||
{
|
{
|
||||||
|
@ -452,7 +452,7 @@ static void geometryEffect(int cposx, int cposy, int cposz, binangle cang, fixed
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
changespritesect(act, geosector[gs]);
|
changespritesect(act, geosector[gs]);
|
||||||
setsprite(act, act->s.x += geox2[gs], act->s.y += geoy2[gs], act->s.z);
|
setsprite(act, act->s->x += geox2[gs], act->s->y += geoy2[gs], act->s->z);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fi.animatesprites(cposx, cposy, cang.asbuild(), smoothratio);
|
fi.animatesprites(cposx, cposy, cang.asbuild(), smoothratio);
|
||||||
|
@ -501,9 +501,7 @@ void displayrooms(int snum, double smoothratio)
|
||||||
|
|
||||||
if (ud.cameraactor)
|
if (ud.cameraactor)
|
||||||
{
|
{
|
||||||
spritetype* s;
|
spritetype* s = ud.cameraactor->s;
|
||||||
|
|
||||||
s = &ud.cameraactor->s;
|
|
||||||
|
|
||||||
if (s->yvel < 0) s->yvel = -100;
|
if (s->yvel < 0) s->yvel = -100;
|
||||||
else if (s->yvel > 199) s->yvel = 300;
|
else if (s->yvel > 199) s->yvel = 300;
|
||||||
|
@ -520,7 +518,7 @@ void displayrooms(int snum, double smoothratio)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Fixme: This should get the aspect ratio from the backend, not the current viewport size.
|
// Fixme: This should get the aspect ratio from the backend, not the current viewport size.
|
||||||
int i = DivScale(1, isRR() ? 64 : p->GetActor()->s.yrepeat + 28, 22);
|
int i = DivScale(1, isRR() ? 64 : p->GetActor()->s->yrepeat + 28, 22);
|
||||||
int viewingaspect = !isRRRA() || !p->DrugMode ? xs_CRoundToInt(double(i) * tan(r_fov * (pi::pi() / 360.))) : getdrugmode(p, i);
|
int viewingaspect = !isRRRA() || !p->DrugMode ? xs_CRoundToInt(double(i) * tan(r_fov * (pi::pi() / 360.))) : getdrugmode(p, i);
|
||||||
renderSetAspect(MulScale(viewingaspect, viewingrange, 16), yxaspect);
|
renderSetAspect(MulScale(viewingaspect, viewingrange, 16), yxaspect);
|
||||||
|
|
||||||
|
@ -571,7 +569,7 @@ void displayrooms(int snum, double smoothratio)
|
||||||
|
|
||||||
if (p->newOwner != nullptr)
|
if (p->newOwner != nullptr)
|
||||||
{
|
{
|
||||||
auto spr = &p->newOwner->s;
|
auto spr = p->newOwner->s;
|
||||||
cang = buildang(spr->interpolatedang(smoothratio));
|
cang = buildang(spr->interpolatedang(smoothratio));
|
||||||
choriz = buildhoriz(spr->shade);
|
choriz = buildhoriz(spr->shade);
|
||||||
cposx = spr->pos.x;
|
cposx = spr->pos.x;
|
||||||
|
@ -589,10 +587,10 @@ void displayrooms(int snum, double smoothratio)
|
||||||
{
|
{
|
||||||
cposz -= isRR() ? 3840 : 3072;
|
cposz -= isRR() ? 3840 : 3072;
|
||||||
|
|
||||||
if (!calcChaseCamPos(&cposx, &cposy, &cposz, &p->GetActor()->s, §, cang, choriz, smoothratio))
|
if (!calcChaseCamPos(&cposx, &cposy, &cposz, p->GetActor()->s, §, cang, choriz, smoothratio))
|
||||||
{
|
{
|
||||||
cposz += isRR() ? 3840 : 3072;
|
cposz += isRR() ? 3840 : 3072;
|
||||||
calcChaseCamPos(&cposx, &cposy, &cposz, &p->GetActor()->s, §, cang, choriz, smoothratio);
|
calcChaseCamPos(&cposx, &cposy, &cposz, p->GetActor()->s, §, cang, choriz, smoothratio);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -608,7 +606,7 @@ void displayrooms(int snum, double smoothratio)
|
||||||
cang += buildang((2 - ((earthquaketime) & 2)) << 2);
|
cang += buildang((2 - ((earthquaketime) & 2)) << 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p->GetActor()->s.pal == 1) cposz -= (18 << 8);
|
if (p->GetActor()->s->pal == 1) cposz -= (18 << 8);
|
||||||
|
|
||||||
else if (p->spritebridge == 0 && p->newOwner == nullptr)
|
else if (p->spritebridge == 0 && p->newOwner == nullptr)
|
||||||
{
|
{
|
||||||
|
|
|
@ -158,7 +158,7 @@ public:
|
||||||
imgScale = baseScale / img->GetDisplayHeight();
|
imgScale = baseScale / img->GetDisplayHeight();
|
||||||
DrawGraphic(img, 2, -1.5, DI_ITEM_LEFT_BOTTOM, 1., -1, -1, imgScale, imgScale);
|
DrawGraphic(img, 2, -1.5, DI_ITEM_LEFT_BOTTOM, 1., -1, -1, imgScale, imgScale);
|
||||||
|
|
||||||
if (!althud_flashing || p->last_extra > (gs.max_player_health >> 2) || (PlayClock & 32) || (p->GetActor()->s.pal == 1 && p->last_extra < 2))
|
if (!althud_flashing || p->last_extra > (gs.max_player_health >> 2) || (PlayClock & 32) || (p->GetActor()->s->pal == 1 && p->last_extra < 2))
|
||||||
{
|
{
|
||||||
int s = -8;
|
int s = -8;
|
||||||
if (althud_flashing && p->last_extra > gs.max_player_health)
|
if (althud_flashing && p->last_extra > gs.max_player_health)
|
||||||
|
@ -261,7 +261,7 @@ public:
|
||||||
// health
|
// health
|
||||||
//
|
//
|
||||||
DrawGraphic(tileGetTexture(HEALTHBOX), 5, -2, DI_ITEM_LEFT_BOTTOM, 1, -1, -1, scale, scale);
|
DrawGraphic(tileGetTexture(HEALTHBOX), 5, -2, DI_ITEM_LEFT_BOTTOM, 1, -1, -1, scale, scale);
|
||||||
int health = (p->GetActor()->s.pal == 1 && p->last_extra < 2) ? 1 : p->last_extra;
|
int health = (p->GetActor()->s->pal == 1 && p->last_extra < 2) ? 1 : p->last_extra;
|
||||||
FStringf format("%d", health);
|
FStringf format("%d", health);
|
||||||
SBar_DrawString(this, digiFont, format, 20, -digiFont->mFont->GetHeight() * scale - 3, DI_TEXT_ALIGN_CENTER, CR_UNTRANSLATED, 1, 0, 0, scale, scale);
|
SBar_DrawString(this, digiFont, format, 20, -digiFont->mFont->GetHeight() * scale - 3, DI_TEXT_ALIGN_CENTER, CR_UNTRANSLATED, 1, 0, 0, scale, scale);
|
||||||
|
|
||||||
|
@ -437,7 +437,7 @@ public:
|
||||||
}
|
}
|
||||||
DrawWeaponAmounts(p, 96, top + 15.5);
|
DrawWeaponAmounts(p, 96, top + 15.5);
|
||||||
|
|
||||||
int num = (p->GetActor()->s.pal == 1 && p->last_extra < 2) ? 1 : p->last_extra;
|
int num = (p->GetActor()->s->pal == 1 && p->last_extra < 2) ? 1 : p->last_extra;
|
||||||
format.Format("%d", num);
|
format.Format("%d", num);
|
||||||
SBar_DrawString(this, digiFont, format, 31, top + 17, DI_TEXT_ALIGN_CENTER, CR_UNTRANSLATED, 1, 0, 0, 1, 1);
|
SBar_DrawString(this, digiFont, format, 31, top + 17, DI_TEXT_ALIGN_CENTER, CR_UNTRANSLATED, 1, 0, 0, 1, 1);
|
||||||
format.Format("%d", GetMoraleOrShield(p, snum));
|
format.Format("%d", GetMoraleOrShield(p, snum));
|
||||||
|
|
|
@ -110,7 +110,7 @@ public:
|
||||||
imgScale = baseScale / img->GetDisplayHeight();
|
imgScale = baseScale / img->GetDisplayHeight();
|
||||||
DrawGraphic(img, 2, -2, DI_ITEM_LEFT_BOTTOM, 1, 0, 0, imgScale, imgScale);
|
DrawGraphic(img, 2, -2, DI_ITEM_LEFT_BOTTOM, 1, 0, 0, imgScale, imgScale);
|
||||||
|
|
||||||
if (!althud_flashing || p->last_extra > (gs.max_player_health >> 2) || (PlayClock & 32) || (p->GetActor()->s.pal == 1 && p->last_extra < 2))
|
if (!althud_flashing || p->last_extra > (gs.max_player_health >> 2) || (PlayClock & 32) || (p->GetActor()->s->pal == 1 && p->last_extra < 2))
|
||||||
{
|
{
|
||||||
int s = -8;
|
int s = -8;
|
||||||
if (althud_flashing && p->last_extra > gs.max_player_health)
|
if (althud_flashing && p->last_extra > gs.max_player_health)
|
||||||
|
@ -230,7 +230,7 @@ public:
|
||||||
// health
|
// health
|
||||||
//
|
//
|
||||||
DrawGraphic(tileGetTexture(HEALTHBOX), 2, -2, DI_ITEM_LEFT_BOTTOM, 1, -1, -1, scale, scale);
|
DrawGraphic(tileGetTexture(HEALTHBOX), 2, -2, DI_ITEM_LEFT_BOTTOM, 1, -1, -1, scale, scale);
|
||||||
int health = (p->GetActor()->s.pal == 1 && p->last_extra < 2) ? 1 : p->last_extra;
|
int health = (p->GetActor()->s->pal == 1 && p->last_extra < 2) ? 1 : p->last_extra;
|
||||||
FStringf format("%d", health);
|
FStringf format("%d", health);
|
||||||
SBar_DrawString(this, digiFont, format, 21.5, -digiFont->mFont->GetHeight() * scale - 5.5, DI_TEXT_ALIGN_CENTER, CR_UNTRANSLATED, 1, 0, 0, scale, scale);
|
SBar_DrawString(this, digiFont, format, 21.5, -digiFont->mFont->GetHeight() * scale - 5.5, DI_TEXT_ALIGN_CENTER, CR_UNTRANSLATED, 1, 0, 0, scale, scale);
|
||||||
|
|
||||||
|
@ -379,7 +379,7 @@ public:
|
||||||
if (p->keys[1]) DrawGraphic(key, 145, top + 21, DI_ITEM_OFFSETS, 1, -1, -1, scale, scale, 0xffffffff, TRANSLATION(Translation_Remap, 0));
|
if (p->keys[1]) DrawGraphic(key, 145, top + 21, DI_ITEM_OFFSETS, 1, -1, -1, scale, scale, 0xffffffff, TRANSLATION(Translation_Remap, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
int num = (p->GetActor()->s.pal == 1 && p->last_extra < 2) ? 1 : p->last_extra;
|
int num = (p->GetActor()->s->pal == 1 && p->last_extra < 2) ? 1 : p->last_extra;
|
||||||
format.Format("%d", num);
|
format.Format("%d", num);
|
||||||
SBar_DrawString(this, digiFont, format, 66.5, top + 16, DI_TEXT_ALIGN_CENTER, CR_UNTRANSLATED, 1, 0, 0, scale, scale);
|
SBar_DrawString(this, digiFont, format, 66.5, top + 16, DI_TEXT_ALIGN_CENTER, CR_UNTRANSLATED, 1, 0, 0, scale, scale);
|
||||||
|
|
||||||
|
|
|
@ -64,7 +64,7 @@ int callsound(int sn, DDukeActor* whatsprite)
|
||||||
DukeSectIterator it(sn);
|
DukeSectIterator it(sn);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
auto si = &act->s;
|
auto si = act->s;
|
||||||
if (si->picnum == MUSICANDSFX && si->lotag < 1000)
|
if (si->picnum == MUSICANDSFX && si->lotag < 1000)
|
||||||
{
|
{
|
||||||
if (whatsprite == nullptr) whatsprite = act;
|
if (whatsprite == nullptr) whatsprite = act;
|
||||||
|
@ -122,17 +122,17 @@ int check_activator_motion(int lotag)
|
||||||
DukeStatIterator it(STAT_ACTIVATOR);
|
DukeStatIterator it(STAT_ACTIVATOR);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
if (act->s.lotag == lotag)
|
if (act->s->lotag == lotag)
|
||||||
{
|
{
|
||||||
for (int j = animatecnt - 1; j >= 0; j--)
|
for (int j = animatecnt - 1; j >= 0; j--)
|
||||||
if (act->s.sectnum == animatesect[j])
|
if (act->s->sectnum == animatesect[j])
|
||||||
return(1);
|
return(1);
|
||||||
|
|
||||||
DukeStatIterator it1(STAT_EFFECTOR);
|
DukeStatIterator it1(STAT_EFFECTOR);
|
||||||
while (auto act2 = it1.Next())
|
while (auto act2 = it1.Next())
|
||||||
{
|
{
|
||||||
if (act->s.sectnum == act2->s.sectnum)
|
if (act->s->sectnum == act2->s->sectnum)
|
||||||
switch (act2->s.lotag)
|
switch (act2->s->lotag)
|
||||||
{
|
{
|
||||||
case SE_11_SWINGING_DOOR:
|
case SE_11_SWINGING_DOOR:
|
||||||
case SE_30_TWO_WAY_TRAIN:
|
case SE_30_TWO_WAY_TRAIN:
|
||||||
|
@ -218,7 +218,7 @@ int findplayer(const DDukeActor* actor, int* d)
|
||||||
{
|
{
|
||||||
short j, closest_player;
|
short j, closest_player;
|
||||||
int x, closest;
|
int x, closest;
|
||||||
auto s = &actor->s.pos;
|
auto s = &actor->s->pos;
|
||||||
|
|
||||||
if (ud.multimode < 2)
|
if (ud.multimode < 2)
|
||||||
{
|
{
|
||||||
|
@ -232,7 +232,7 @@ int findplayer(const DDukeActor* actor, int* d)
|
||||||
for (j = connecthead; j >= 0; j = connectpoint2[j])
|
for (j = connecthead; j >= 0; j = connectpoint2[j])
|
||||||
{
|
{
|
||||||
x = abs(ps[j].oposx - s->x) + abs(ps[j].oposy - s->y) + ((abs(ps[j].oposz - s->z + (28 << 8))) >> 4);
|
x = abs(ps[j].oposx - s->x) + abs(ps[j].oposy - s->y) + ((abs(ps[j].oposz - s->z + (28 << 8))) >> 4);
|
||||||
if (x < closest && ps[j].GetActor()->s.extra > 0)
|
if (x < closest && ps[j].GetActor()->s->extra > 0)
|
||||||
{
|
{
|
||||||
closest_player = j;
|
closest_player = j;
|
||||||
closest = x;
|
closest = x;
|
||||||
|
@ -258,7 +258,7 @@ int findotherplayer(int p, int* d)
|
||||||
closest_player = p;
|
closest_player = p;
|
||||||
|
|
||||||
for (j = connecthead; j >= 0; j = connectpoint2[j])
|
for (j = connecthead; j >= 0; j = connectpoint2[j])
|
||||||
if (p != j && ps[j].GetActor()->s.extra > 0)
|
if (p != j && ps[j].GetActor()->s->extra > 0)
|
||||||
{
|
{
|
||||||
x = abs(ps[j].oposx - ps[p].posx) + abs(ps[j].oposy - ps[p].posy) + (abs(ps[j].oposz - ps[p].posz) >> 4);
|
x = abs(ps[j].oposx - ps[p].posx) + abs(ps[j].oposy - ps[p].posy) + (abs(ps[j].oposz - ps[p].posz) >> 4);
|
||||||
|
|
||||||
|
@ -356,10 +356,10 @@ void doanimations(void)
|
||||||
DukeSectIterator it(dasect);
|
DukeSectIterator it(dasect);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
if (act->s.statnum != STAT_EFFECTOR)
|
if (act->s->statnum != STAT_EFFECTOR)
|
||||||
{
|
{
|
||||||
act->s.backupz();
|
act->s->backupz();
|
||||||
act->s.z += v;
|
act->s->z += v;
|
||||||
act->floorz = sector[dasect].floorz + v;
|
act->floorz = sector[dasect].floorz + v;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -435,7 +435,7 @@ int setanimation(short animsect, int animtype, int animtarget, int thegoal, int
|
||||||
|
|
||||||
bool activatewarpelevators(DDukeActor* actor, int d) //Parm = sectoreffectornum
|
bool activatewarpelevators(DDukeActor* actor, int d) //Parm = sectoreffectornum
|
||||||
{
|
{
|
||||||
int sn = actor->s.sectnum;
|
int sn = actor->s->sectnum;
|
||||||
|
|
||||||
// See if the sector exists
|
// See if the sector exists
|
||||||
|
|
||||||
|
@ -443,10 +443,10 @@ bool activatewarpelevators(DDukeActor* actor, int d) //Parm = sectoreffectornum
|
||||||
DDukeActor *act2;
|
DDukeActor *act2;
|
||||||
while ((act2 = it.Next()))
|
while ((act2 = it.Next()))
|
||||||
{
|
{
|
||||||
if (act2->s.lotag == SE_17_WARP_ELEVATOR || (isRRRA() && act2->s.lotag == SE_18_INCREMENTAL_SECTOR_RISE_FALL))
|
if (act2->s->lotag == SE_17_WARP_ELEVATOR || (isRRRA() && act2->s->lotag == SE_18_INCREMENTAL_SECTOR_RISE_FALL))
|
||||||
if (act2->s.hitag == actor->s.hitag)
|
if (act2->s->hitag == actor->s->hitag)
|
||||||
if ((abs(sector[sn].floorz - actor->temp_data[2]) > act2->s.yvel) ||
|
if ((abs(sector[sn].floorz - actor->temp_data[2]) > act2->s->yvel) ||
|
||||||
(sector[act2->s.sectnum].hitag == (sector[sn].hitag - d)))
|
(sector[act2->s->sectnum].hitag == (sector[sn].hitag - d)))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -466,8 +466,8 @@ bool activatewarpelevators(DDukeActor* actor, int d) //Parm = sectoreffectornum
|
||||||
it.Reset(STAT_EFFECTOR);
|
it.Reset(STAT_EFFECTOR);
|
||||||
while ((act2 = it.Next()))
|
while ((act2 = it.Next()))
|
||||||
{
|
{
|
||||||
if (act2->s.lotag == SE_17_WARP_ELEVATOR || (isRRRA() && act2->s.lotag == SE_18_INCREMENTAL_SECTOR_RISE_FALL))
|
if (act2->s->lotag == SE_17_WARP_ELEVATOR || (isRRRA() && act2->s->lotag == SE_18_INCREMENTAL_SECTOR_RISE_FALL))
|
||||||
if (act2->s.hitag == actor->s.hitag)
|
if (act2->s->hitag == actor->s->hitag)
|
||||||
{
|
{
|
||||||
act2->temp_data[0] = d;
|
act2->temp_data[0] = d;
|
||||||
act2->temp_data[1] = d; //Make all check warp
|
act2->temp_data[1] = d; //Make all check warp
|
||||||
|
@ -575,18 +575,18 @@ static void handle_st09(int sn, DDukeActor* actor)
|
||||||
|
|
||||||
static void handle_st15(int sn, DDukeActor* actor)
|
static void handle_st15(int sn, DDukeActor* actor)
|
||||||
{
|
{
|
||||||
if (actor->s.picnum != TILE_APLAYER) return;
|
if (actor->s->picnum != TILE_APLAYER) return;
|
||||||
|
|
||||||
sectortype* sptr = §or[sn];
|
sectortype* sptr = §or[sn];
|
||||||
DukeSectIterator it(sn);
|
DukeSectIterator it(sn);
|
||||||
DDukeActor* a2;
|
DDukeActor* a2;
|
||||||
while ((a2 = it.Next()))
|
while ((a2 = it.Next()))
|
||||||
{
|
{
|
||||||
if (a2->s.picnum == SECTOREFFECTOR && a2->s.lotag == ST_17_PLATFORM_UP) break;
|
if (a2->s->picnum == SECTOREFFECTOR && a2->s->lotag == ST_17_PLATFORM_UP) break;
|
||||||
}
|
}
|
||||||
if (!a2) return;
|
if (!a2) return;
|
||||||
|
|
||||||
if (actor->s.sectnum == sn)
|
if (actor->s->sectnum == sn)
|
||||||
{
|
{
|
||||||
if (activatewarpelevators(a2, -1))
|
if (activatewarpelevators(a2, -1))
|
||||||
activatewarpelevators(a2, 1);
|
activatewarpelevators(a2, 1);
|
||||||
|
@ -596,7 +596,7 @@ static void handle_st15(int sn, DDukeActor* actor)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (sptr->floorz > a2->s.z)
|
if (sptr->floorz > a2->s->z)
|
||||||
activatewarpelevators(a2, -1);
|
activatewarpelevators(a2, -1);
|
||||||
else
|
else
|
||||||
activatewarpelevators(a2, 1);
|
activatewarpelevators(a2, 1);
|
||||||
|
@ -678,10 +678,10 @@ static void handle_st29(int sn, DDukeActor* actor)
|
||||||
DukeStatIterator it(STAT_EFFECTOR);
|
DukeStatIterator it(STAT_EFFECTOR);
|
||||||
while (auto act2 = it.Next())
|
while (auto act2 = it.Next())
|
||||||
{
|
{
|
||||||
if ((act2->s.lotag == 22) &&
|
if ((act2->s->lotag == 22) &&
|
||||||
(act2->s.hitag == sptr->hitag))
|
(act2->s->hitag == sptr->hitag))
|
||||||
{
|
{
|
||||||
sector[act2->s.sectnum].extra = -sector[act2->s.sectnum].extra;
|
sector[act2->s->sectnum].extra = -sector[act2->s->sectnum].extra;
|
||||||
|
|
||||||
act2->temp_data[0] = sn;
|
act2->temp_data[0] = sn;
|
||||||
act2->temp_data[1] = 1;
|
act2->temp_data[1] = 1;
|
||||||
|
@ -713,9 +713,9 @@ REDODOOR:
|
||||||
DukeSectIterator it(sn);
|
DukeSectIterator it(sn);
|
||||||
while ((a2 = it.Next()))
|
while ((a2 = it.Next()))
|
||||||
{
|
{
|
||||||
if (a2->s.statnum == 3 && a2->s.lotag == 9)
|
if (a2->s->statnum == 3 && a2->s->lotag == 9)
|
||||||
{
|
{
|
||||||
j = a2->s.z;
|
j = a2->s->z;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -815,14 +815,14 @@ static void handle_st23(int sn, DDukeActor* actor)
|
||||||
DDukeActor* act2;
|
DDukeActor* act2;
|
||||||
while ((act2 = it.Next()))
|
while ((act2 = it.Next()))
|
||||||
{
|
{
|
||||||
if (act2->s.lotag == SE_11_SWINGING_DOOR && act2->s.sectnum == sn && !act2->temp_data[4])
|
if (act2->s->lotag == SE_11_SWINGING_DOOR && act2->s->sectnum == sn && !act2->temp_data[4])
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!act2) return;
|
if (!act2) return;
|
||||||
|
|
||||||
int l = sector[act2->s.sectnum].lotag & 0x8000;
|
int l = sector[act2->s->sectnum].lotag & 0x8000;
|
||||||
|
|
||||||
if (act2)
|
if (act2)
|
||||||
{
|
{
|
||||||
|
@ -830,7 +830,7 @@ static void handle_st23(int sn, DDukeActor* actor)
|
||||||
|
|
||||||
while (auto act3 = it.Next())
|
while (auto act3 = it.Next())
|
||||||
{
|
{
|
||||||
if (l == (sector[act3->s.sectnum].lotag & 0x8000) && act3->s.lotag == SE_11_SWINGING_DOOR && act2->s.hitag == act3->s.hitag && act3->temp_data[4])
|
if (l == (sector[act3->s->sectnum].lotag & 0x8000) && act3->s->lotag == SE_11_SWINGING_DOOR && act2->s->hitag == act3->s->hitag && act3->temp_data[4])
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -839,10 +839,10 @@ static void handle_st23(int sn, DDukeActor* actor)
|
||||||
it.Reset(STAT_EFFECTOR);
|
it.Reset(STAT_EFFECTOR);
|
||||||
while (auto act3 = it.Next())
|
while (auto act3 = it.Next())
|
||||||
{
|
{
|
||||||
if (l == (sector[act3->s.sectnum].lotag & 0x8000) && act3->s.lotag == SE_11_SWINGING_DOOR && act2->s.hitag == act3->s.hitag)
|
if (l == (sector[act3->s->sectnum].lotag & 0x8000) && act3->s->lotag == SE_11_SWINGING_DOOR && act2->s->hitag == act3->s->hitag)
|
||||||
{
|
{
|
||||||
if (sector[act3->s.sectnum].lotag & 0x8000) sector[act3->s.sectnum].lotag &= 0x7fff;
|
if (sector[act3->s->sectnum].lotag & 0x8000) sector[act3->s->sectnum].lotag &= 0x7fff;
|
||||||
else sector[act3->s.sectnum].lotag |= 0x8000;
|
else sector[act3->s->sectnum].lotag |= 0x8000;
|
||||||
act3->temp_data[4] = 1;
|
act3->temp_data[4] = 1;
|
||||||
act3->temp_data[3] = -act3->temp_data[3];
|
act3->temp_data[3] = -act3->temp_data[3];
|
||||||
if (q == 0)
|
if (q == 0)
|
||||||
|
@ -867,7 +867,7 @@ static void handle_st25(int sn, DDukeActor* actor)
|
||||||
DDukeActor* act2;
|
DDukeActor* act2;
|
||||||
while ((act2 = it.Next()))
|
while ((act2 = it.Next()))
|
||||||
{
|
{
|
||||||
if (act2->s.lotag == 15 && act2->s.sectnum == sn)
|
if (act2->s->lotag == 15 && act2->s->sectnum == sn)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -879,15 +879,15 @@ static void handle_st25(int sn, DDukeActor* actor)
|
||||||
it.Reset(STAT_EFFECTOR);
|
it.Reset(STAT_EFFECTOR);
|
||||||
while (auto act3 = it.Next())
|
while (auto act3 = it.Next())
|
||||||
{
|
{
|
||||||
if (act3->s.hitag == act2->s.hitag)
|
if (act3->s->hitag == act2->s->hitag)
|
||||||
{
|
{
|
||||||
if (act3->s.lotag == 15)
|
if (act3->s->lotag == 15)
|
||||||
{
|
{
|
||||||
sector[act3->s.sectnum].lotag ^= 0x8000; // Toggle the open or close
|
sector[act3->s->sectnum].lotag ^= 0x8000; // Toggle the open or close
|
||||||
act3->s.ang += 1024;
|
act3->s->ang += 1024;
|
||||||
if (act3->temp_data[4]) callsound(act3->s.sectnum, act3);
|
if (act3->temp_data[4]) callsound(act3->s->sectnum, act3);
|
||||||
callsound(act3->s.sectnum, act3);
|
callsound(act3->s->sectnum, act3);
|
||||||
if (sector[act3->s.sectnum].lotag & 0x8000) act3->temp_data[4] = 1;
|
if (sector[act3->s->sectnum].lotag & 0x8000) act3->temp_data[4] = 1;
|
||||||
else act3->temp_data[4] = 2;
|
else act3->temp_data[4] = 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -905,7 +905,7 @@ static void handle_st27(int sn, DDukeActor* actor)
|
||||||
DukeStatIterator it(STAT_EFFECTOR);
|
DukeStatIterator it(STAT_EFFECTOR);
|
||||||
while (auto act2 = it.Next())
|
while (auto act2 = it.Next())
|
||||||
{
|
{
|
||||||
if ((act2->s.lotag & 0xff) == 20 && act2->s.sectnum == sn) //Bridge
|
if ((act2->s->lotag & 0xff) == 20 && act2->s->sectnum == sn) //Bridge
|
||||||
{
|
{
|
||||||
|
|
||||||
sector[sn].lotag ^= 0x8000;
|
sector[sn].lotag ^= 0x8000;
|
||||||
|
@ -931,9 +931,9 @@ static void handle_st28(int sn, DDukeActor* actor)
|
||||||
DukeSectIterator it(sn);
|
DukeSectIterator it(sn);
|
||||||
while (auto a2 = it.Next())
|
while (auto a2 = it.Next())
|
||||||
{
|
{
|
||||||
if (a2->s.statnum == 3 && (a2->s.lotag & 0xff) == 21)
|
if (a2->s->statnum == 3 && (a2->s->lotag & 0xff) == 21)
|
||||||
{
|
{
|
||||||
j = a2->s.hitag;
|
j = a2->s->hitag;
|
||||||
break; //Found it
|
break; //Found it
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -942,8 +942,8 @@ static void handle_st28(int sn, DDukeActor* actor)
|
||||||
DukeStatIterator it1(STAT_EFFECTOR);
|
DukeStatIterator it1(STAT_EFFECTOR);
|
||||||
while (auto act3 = it.Next())
|
while (auto act3 = it.Next())
|
||||||
{
|
{
|
||||||
if ((act3->s.lotag & 0xff) == 21 && !act3->temp_data[0] &&
|
if ((act3->s->lotag & 0xff) == 21 && !act3->temp_data[0] &&
|
||||||
(act3->s.hitag) == j)
|
(act3->s->hitag) == j)
|
||||||
act3->temp_data[0] = 1;
|
act3->temp_data[0] = 1;
|
||||||
}
|
}
|
||||||
callsound(sn, actor);
|
callsound(sn, actor);
|
||||||
|
@ -986,8 +986,8 @@ void operatesectors(int sn, DDukeActor *actor)
|
||||||
auto act = ScriptIndexToActor(sector[sn].hitag);
|
auto act = ScriptIndexToActor(sector[sn].hitag);
|
||||||
if (!act) break;
|
if (!act) break;
|
||||||
if (act->tempang == 0 || act->tempang == 256) callsound(sn, actor);
|
if (act->tempang == 0 || act->tempang == 256) callsound(sn, actor);
|
||||||
if (act->s.extra == 1) act->s.extra = 3;
|
if (act->s->extra == 1) act->s->extra = 3;
|
||||||
else act->s.extra = 1;
|
else act->s->extra = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1101,45 +1101,45 @@ void operateactivators(int low, int plnum)
|
||||||
DukeStatIterator it(STAT_ACTIVATOR);
|
DukeStatIterator it(STAT_ACTIVATOR);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
if (act->s.lotag == low)
|
if (act->s->lotag == low)
|
||||||
{
|
{
|
||||||
if (act->s.picnum == ACTIVATORLOCKED)
|
if (act->s->picnum == ACTIVATORLOCKED)
|
||||||
{
|
{
|
||||||
sector[act->s.sectnum].lotag ^= 16384;
|
sector[act->s->sectnum].lotag ^= 16384;
|
||||||
|
|
||||||
if (plnum >= 0)
|
if (plnum >= 0)
|
||||||
{
|
{
|
||||||
if (sector[act->s.sectnum].lotag & 16384)
|
if (sector[act->s->sectnum].lotag & 16384)
|
||||||
FTA(4, &ps[plnum]);
|
FTA(4, &ps[plnum]);
|
||||||
else FTA(8, &ps[plnum]);
|
else FTA(8, &ps[plnum]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
switch (act->s.hitag)
|
switch (act->s->hitag)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
if (sector[act->s.sectnum].floorz != sector[act->s.sectnum].ceilingz)
|
if (sector[act->s->sectnum].floorz != sector[act->s->sectnum].ceilingz)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if (sector[act->s.sectnum].floorz == sector[act->s.sectnum].ceilingz)
|
if (sector[act->s->sectnum].floorz == sector[act->s->sectnum].ceilingz)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sector[act->s.sectnum].lotag < 3)
|
if (sector[act->s->sectnum].lotag < 3)
|
||||||
{
|
{
|
||||||
DukeSectIterator it(act->s.sectnum);
|
DukeSectIterator it(act->s->sectnum);
|
||||||
while (auto a2 = it.Next())
|
while (auto a2 = it.Next())
|
||||||
{
|
{
|
||||||
if (a2->s.statnum == 3) switch (a2->s.lotag)
|
if (a2->s->statnum == 3) switch (a2->s->lotag)
|
||||||
{
|
{
|
||||||
case SE_18_INCREMENTAL_SECTOR_RISE_FALL:
|
case SE_18_INCREMENTAL_SECTOR_RISE_FALL:
|
||||||
if (isRRRA()) break;
|
if (isRRRA()) break;
|
||||||
|
@ -1147,16 +1147,16 @@ void operateactivators(int low, int plnum)
|
||||||
case SE_31_FLOOR_RISE_FALL:
|
case SE_31_FLOOR_RISE_FALL:
|
||||||
case SE_32_CEILING_RISE_FALL:
|
case SE_32_CEILING_RISE_FALL:
|
||||||
a2->temp_data[0] = 1 - a2->temp_data[0];
|
a2->temp_data[0] = 1 - a2->temp_data[0];
|
||||||
callsound(act->s.sectnum, a2);
|
callsound(act->s->sectnum, a2);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (k == -1 && (sector[act->s.sectnum].lotag & 0xff) == 22)
|
if (k == -1 && (sector[act->s->sectnum].lotag & 0xff) == 22)
|
||||||
k = callsound(act->s.sectnum, act);
|
k = callsound(act->s->sectnum, act);
|
||||||
|
|
||||||
operatesectors(act->s.sectnum, act);
|
operatesectors(act->s->sectnum, act);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1175,8 +1175,8 @@ void operatemasterswitches(int low)
|
||||||
DukeStatIterator it(STAT_STANDABLE);
|
DukeStatIterator it(STAT_STANDABLE);
|
||||||
while (auto act2 = it.Next())
|
while (auto act2 = it.Next())
|
||||||
{
|
{
|
||||||
if (act2->s.picnum == MASTERSWITCH && act2->s.lotag == low && act2->s.yvel == 0)
|
if (act2->s->picnum == MASTERSWITCH && act2->s->lotag == low && act2->s->yvel == 0)
|
||||||
act2->s.yvel = 1;
|
act2->s->yvel = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1203,7 +1203,7 @@ void operateforcefields_common(DDukeActor *effector, int low, const std::initial
|
||||||
{
|
{
|
||||||
wall[i].cstat = 0;
|
wall[i].cstat = 0;
|
||||||
|
|
||||||
if (effector && effector->s.picnum == SECTOREFFECTOR && effector->s.lotag == 30)
|
if (effector && effector->s->picnum == SECTOREFFECTOR && effector->s->lotag == 30)
|
||||||
wall[i].lotag = 0;
|
wall[i].lotag = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1237,15 +1237,15 @@ void allignwarpelevators(void)
|
||||||
DukeStatIterator it(STAT_EFFECTOR);
|
DukeStatIterator it(STAT_EFFECTOR);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
if (act->s.lotag == SE_17_WARP_ELEVATOR && act->s.shade > 16)
|
if (act->s->lotag == SE_17_WARP_ELEVATOR && act->s->shade > 16)
|
||||||
{
|
{
|
||||||
DukeStatIterator it1(STAT_EFFECTOR);
|
DukeStatIterator it1(STAT_EFFECTOR);
|
||||||
while (auto act2 = it1.Next())
|
while (auto act2 = it1.Next())
|
||||||
{
|
{
|
||||||
if ((act2->s.lotag) == SE_17_WARP_ELEVATOR && act != act2 && act->s.hitag == act2->s.hitag)
|
if ((act2->s->lotag) == SE_17_WARP_ELEVATOR && act != act2 && act->s->hitag == act2->s->hitag)
|
||||||
{
|
{
|
||||||
sector[act2->s.sectnum].floorz = sector[act->s.sectnum].floorz;
|
sector[act2->s->sectnum].floorz = sector[act->s->sectnum].floorz;
|
||||||
sector[act2->s.sectnum].ceilingz = sector[act->s.sectnum].ceilingz;
|
sector[act2->s->sectnum].ceilingz = sector[act->s->sectnum].ceilingz;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -191,15 +191,15 @@ void operaterespawns_d(int low)
|
||||||
DukeStatIterator it(STAT_FX);
|
DukeStatIterator it(STAT_FX);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
if (act->s.lotag == low) switch (act->s.picnum)
|
if (act->s->lotag == low) switch (act->s->picnum)
|
||||||
{
|
{
|
||||||
case RESPAWN:
|
case RESPAWN:
|
||||||
if (badguypic(act->s.hitag) && ud.monsters_off) break;
|
if (badguypic(act->s->hitag) && ud.monsters_off) break;
|
||||||
|
|
||||||
auto star = spawn(act, TRANSPORTERSTAR);
|
auto star = spawn(act, TRANSPORTERSTAR);
|
||||||
star->s.z -= (32 << 8);
|
star->s->z -= (32 << 8);
|
||||||
|
|
||||||
act->s.extra = 66 - 12; // Just a way to killit
|
act->s->extra = 66 - 12; // Just a way to killit
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -234,13 +234,13 @@ bool checkhitswitch_d(int snum, int ww, DDukeActor *act)
|
||||||
|
|
||||||
if (act)
|
if (act)
|
||||||
{
|
{
|
||||||
lotag = act->s.lotag;
|
lotag = act->s->lotag;
|
||||||
if (lotag == 0) return 0;
|
if (lotag == 0) return 0;
|
||||||
hitag = act->s.hitag;
|
hitag = act->s->hitag;
|
||||||
sx = act->s.x;
|
sx = act->s->x;
|
||||||
sy = act->s.y;
|
sy = act->s->y;
|
||||||
picnum = act->s.picnum;
|
picnum = act->s->picnum;
|
||||||
switchpal = act->s.pal;
|
switchpal = act->s->pal;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -267,7 +267,7 @@ bool checkhitswitch_d(int snum, int ww, DDukeActor *act)
|
||||||
if (act)
|
if (act)
|
||||||
{
|
{
|
||||||
StopCommentary();
|
StopCommentary();
|
||||||
act->s.picnum = DEVELOPERCOMMENTARY;
|
act->s->picnum = DEVELOPERCOMMENTARY;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -275,7 +275,7 @@ bool checkhitswitch_d(int snum, int ww, DDukeActor *act)
|
||||||
if (act)
|
if (act)
|
||||||
{
|
{
|
||||||
if (StartCommentary(lotag, act))
|
if (StartCommentary(lotag, act))
|
||||||
act->s.picnum = DEVELOPERCOMMENTARY+1;
|
act->s->picnum = DEVELOPERCOMMENTARY+1;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -354,7 +354,7 @@ bool checkhitswitch_d(int snum, int ww, DDukeActor *act)
|
||||||
DukeStatIterator it(STAT_DEFAULT);
|
DukeStatIterator it(STAT_DEFAULT);
|
||||||
while (auto other = it.Next())
|
while (auto other = it.Next())
|
||||||
{
|
{
|
||||||
auto si = &other->s;
|
auto si = other->s;
|
||||||
if (lotag == si->lotag) switch (si->picnum)
|
if (lotag == si->lotag) switch (si->picnum)
|
||||||
{
|
{
|
||||||
case DIPSWITCH:
|
case DIPSWITCH:
|
||||||
|
@ -551,12 +551,12 @@ bool checkhitswitch_d(int snum, int ww, DDukeActor *act)
|
||||||
DukeStatIterator it(STAT_EFFECTOR);
|
DukeStatIterator it(STAT_EFFECTOR);
|
||||||
while (auto other = it.Next())
|
while (auto other = it.Next())
|
||||||
{
|
{
|
||||||
if (other->s.hitag == lotag)
|
if (other->s->hitag == lotag)
|
||||||
{
|
{
|
||||||
switch (other->s.lotag)
|
switch (other->s->lotag)
|
||||||
{
|
{
|
||||||
case SE_12_LIGHT_SWITCH:
|
case SE_12_LIGHT_SWITCH:
|
||||||
sector[other->s.sectnum].floorpal = 0;
|
sector[other->s->sectnum].floorpal = 0;
|
||||||
other->temp_data[0]++;
|
other->temp_data[0]++;
|
||||||
if (other->temp_data[0] == 2)
|
if (other->temp_data[0] == 2)
|
||||||
other->temp_data[0]++;
|
other->temp_data[0]++;
|
||||||
|
@ -621,9 +621,9 @@ void activatebysector_d(int sect, DDukeActor* activator)
|
||||||
DukeSectIterator it(sect);
|
DukeSectIterator it(sect);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
if (act->s.picnum == ACTIVATOR)
|
if (act->s->picnum == ACTIVATOR)
|
||||||
{
|
{
|
||||||
operateactivators(act->s.lotag, -1);
|
operateactivators(act->s->lotag, -1);
|
||||||
didit = 1;
|
didit = 1;
|
||||||
// return;
|
// return;
|
||||||
}
|
}
|
||||||
|
@ -684,12 +684,12 @@ void checkhitwall_d(DDukeActor* spr, int dawallnum, int x, int y, int z, int atw
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (atwith == CHAINGUN)
|
if (atwith == CHAINGUN)
|
||||||
spawned = EGS(sn, x, y, z, FORCERIPPLE, -127, 16 + spr->s.xrepeat, 16 + spr->s.yrepeat, 0, 0, 0, spr, 5);
|
spawned = EGS(sn, x, y, z, FORCERIPPLE, -127, 16 + spr->s->xrepeat, 16 + spr->s->yrepeat, 0, 0, 0, spr, 5);
|
||||||
else spawned = EGS(sn, x, y, z, FORCERIPPLE, -127, 32, 32, 0, 0, 0, spr, 5);
|
else spawned = EGS(sn, x, y, z, FORCERIPPLE, -127, 32, 32, 0, 0, 0, spr, 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
spawned->s.cstat |= 18 + 128;
|
spawned->s->cstat |= 18 + 128;
|
||||||
spawned->s.ang = getangle(wal->x - wall[wal->point2].x, wal->y - wall[wal->point2].y) - 512;
|
spawned->s->ang = getangle(wal->x - wall[wal->point2].x, wal->y - wall[wal->point2].y) - 512;
|
||||||
|
|
||||||
S_PlayActorSound(SOMETHINGHITFORCE, spawned);
|
S_PlayActorSound(SOMETHINGHITFORCE, spawned);
|
||||||
|
|
||||||
|
@ -718,7 +718,7 @@ void checkhitwall_d(DDukeActor* spr, int dawallnum, int x, int y, int z, int atw
|
||||||
wall[wal->nextwall].cstat = 0;
|
wall[wal->nextwall].cstat = 0;
|
||||||
|
|
||||||
auto spawned = EGS(sn, x, y, z, SECTOREFFECTOR, 0, 0, 0, ps[0].angle.ang.asbuild(), 0, 0, spr, 3);
|
auto spawned = EGS(sn, x, y, z, SECTOREFFECTOR, 0, 0, 0, ps[0].angle.ang.asbuild(), 0, 0, spr, 3);
|
||||||
spawned->s.lotag = 128;
|
spawned->s->lotag = 128;
|
||||||
spawned->temp_data[1] = 5;
|
spawned->temp_data[1] = 5;
|
||||||
spawned->temp_data[2] = dawallnum;
|
spawned->temp_data[2] = dawallnum;
|
||||||
S_PlayActorSound(GLASS_BREAKING, spawned);
|
S_PlayActorSound(GLASS_BREAKING, spawned);
|
||||||
|
@ -869,7 +869,7 @@ void checkhitwall_d(DDukeActor* spr, int dawallnum, int x, int y, int z, int atw
|
||||||
DukeStatIterator it(STAT_EFFECTOR);
|
DukeStatIterator it(STAT_EFFECTOR);
|
||||||
while (auto effector = it.Next())
|
while (auto effector = it.Next())
|
||||||
{
|
{
|
||||||
if (effector->s.hitag == wall[dawallnum].lotag && effector->s.lotag == 3)
|
if (effector->s->hitag == wall[dawallnum].lotag && effector->s->lotag == 3)
|
||||||
{
|
{
|
||||||
effector->temp_data[2] = j;
|
effector->temp_data[2] = j;
|
||||||
effector->temp_data[3] = darkestwall;
|
effector->temp_data[3] = darkestwall;
|
||||||
|
@ -890,12 +890,12 @@ void checkplayerhurt_d(struct player_struct* p, const Collision& coll)
|
||||||
{
|
{
|
||||||
if (coll.type == kHitSprite)
|
if (coll.type == kHitSprite)
|
||||||
{
|
{
|
||||||
switch (coll.actor->s.picnum)
|
switch (coll.actor->s->picnum)
|
||||||
{
|
{
|
||||||
case CACTUS:
|
case CACTUS:
|
||||||
if (p->hurt_delay < 8)
|
if (p->hurt_delay < 8)
|
||||||
{
|
{
|
||||||
p->GetActor()->s.extra -= 5;
|
p->GetActor()->s->extra -= 5;
|
||||||
p->hurt_delay = 16;
|
p->hurt_delay = 16;
|
||||||
SetPlayerPal(p, PalEntry(32, 32, 0, 0));
|
SetPlayerPal(p, PalEntry(32, 32, 0, 0));
|
||||||
S_PlayActorSound(DUKE_LONGTERM_PAIN, p->GetActor());
|
S_PlayActorSound(DUKE_LONGTERM_PAIN, p->GetActor());
|
||||||
|
@ -914,7 +914,7 @@ void checkplayerhurt_d(struct player_struct* p, const Collision& coll)
|
||||||
case W_FORCEFIELD:
|
case W_FORCEFIELD:
|
||||||
case W_FORCEFIELD + 1:
|
case W_FORCEFIELD + 1:
|
||||||
case W_FORCEFIELD + 2:
|
case W_FORCEFIELD + 2:
|
||||||
p->GetActor()->s.extra -= 5;
|
p->GetActor()->s->extra -= 5;
|
||||||
|
|
||||||
p->hurt_delay = 16;
|
p->hurt_delay = 16;
|
||||||
SetPlayerPal(p, PalEntry(32, 32, 0, 0));
|
SetPlayerPal(p, PalEntry(32, 32, 0, 0));
|
||||||
|
@ -987,12 +987,12 @@ bool checkhitceiling_d(int sn)
|
||||||
DukeSectIterator it(sn);
|
DukeSectIterator it(sn);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
if (act->s.picnum == SECTOREFFECTOR && act->s.lotag == 12)
|
if (act->s->picnum == SECTOREFFECTOR && act->s->lotag == 12)
|
||||||
{
|
{
|
||||||
DukeStatIterator it1(STAT_EFFECTOR);
|
DukeStatIterator it1(STAT_EFFECTOR);
|
||||||
while (auto act2 = it1.Next())
|
while (auto act2 = it1.Next())
|
||||||
{
|
{
|
||||||
if (act2->s.hitag == act->s.hitag)
|
if (act2->s->hitag == act->s->hitag)
|
||||||
act2->temp_data[3] = 1;
|
act2->temp_data[3] = 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1004,7 +1004,7 @@ bool checkhitceiling_d(int sn)
|
||||||
DukeStatIterator it(STAT_EFFECTOR);
|
DukeStatIterator it(STAT_EFFECTOR);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
if (act->s.hitag == (sector[sn].hitag) && act->s.lotag == 3)
|
if (act->s->hitag == (sector[sn].hitag) && act->s->lotag == 3)
|
||||||
{
|
{
|
||||||
act->temp_data[2] = j;
|
act->temp_data[2] = j;
|
||||||
act->temp_data[4] = 1;
|
act->temp_data[4] = 1;
|
||||||
|
@ -1026,8 +1026,8 @@ bool checkhitceiling_d(int sn)
|
||||||
void checkhitsprite_d(DDukeActor* targ, DDukeActor* proj)
|
void checkhitsprite_d(DDukeActor* targ, DDukeActor* proj)
|
||||||
{
|
{
|
||||||
int j, k, p;
|
int j, k, p;
|
||||||
spritetype* s = &targ->s;
|
spritetype* s = targ->s;
|
||||||
auto pspr = &proj->s;
|
auto pspr = proj->s;
|
||||||
|
|
||||||
switch (s->picnum)
|
switch (s->picnum)
|
||||||
{
|
{
|
||||||
|
@ -1105,7 +1105,7 @@ void checkhitsprite_d(DDukeActor* targ, DDukeActor* proj)
|
||||||
for (k = 0; k < 64; k++)
|
for (k = 0; k < 64; k++)
|
||||||
{
|
{
|
||||||
auto j = EGS(s->sectnum, s->x, s->y, s->z - (krand() % (48 << 8)), SCRAP3 + (krand() & 3), -8, 48, 48, krand() & 2047, (krand() & 63) + 64, -(krand() & 4095) - (s->zvel >> 2), targ, 5);
|
auto j = EGS(s->sectnum, s->x, s->y, s->z - (krand() % (48 << 8)), SCRAP3 + (krand() & 3), -8, 48, 48, krand() & 2047, (krand() & 63) + 64, -(krand() & 4095) - (s->zvel >> 2), targ, 5);
|
||||||
j->s.pal = 8;
|
j->s->pal = 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (s->picnum == CACTUS)
|
if (s->picnum == CACTUS)
|
||||||
|
@ -1304,7 +1304,7 @@ void checkhitsprite_d(DDukeActor* targ, DDukeActor* proj)
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
auto j = spawn(targ, STEAM);
|
auto j = spawn(targ, STEAM);
|
||||||
j->s.z = sector[s->sectnum].floorz - (32 << 8);
|
j->s->z = sector[s->sectnum].floorz - (32 << 8);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1366,7 +1366,7 @@ void checkhitsprite_d(DDukeActor* targ, DDukeActor* proj)
|
||||||
case PLAYERONWATER:
|
case PLAYERONWATER:
|
||||||
targ = targ->GetOwner();
|
targ = targ->GetOwner();
|
||||||
if (!targ) break;
|
if (!targ) break;
|
||||||
s = &targ->s;
|
s = targ->s;
|
||||||
default:
|
default:
|
||||||
if ((s->cstat & 16) && s->hitag == 0 && s->lotag == 0 && s->statnum == 0)
|
if ((s->cstat & 16) && s->hitag == 0 && s->lotag == 0 && s->statnum == 0)
|
||||||
break;
|
break;
|
||||||
|
@ -1386,16 +1386,16 @@ void checkhitsprite_d(DDukeActor* targ, DDukeActor* proj)
|
||||||
{
|
{
|
||||||
auto spawned = spawn(proj, JIBS6);
|
auto spawned = spawn(proj, JIBS6);
|
||||||
if (pspr->pal == 6)
|
if (pspr->pal == 6)
|
||||||
spawned->s.pal = 6;
|
spawned->s->pal = 6;
|
||||||
spawned->s.z += (4 << 8);
|
spawned->s->z += (4 << 8);
|
||||||
spawned->s.xvel = 16;
|
spawned->s->xvel = 16;
|
||||||
spawned->s.xrepeat = spawned->s.yrepeat = 24;
|
spawned->s->xrepeat = spawned->s->yrepeat = 24;
|
||||||
spawned->s.ang += 32 - (krand() & 63);
|
spawned->s->ang += 32 - (krand() & 63);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto Owner = proj->GetOwner();
|
auto Owner = proj->GetOwner();
|
||||||
|
|
||||||
if (Owner && Owner->s.picnum == APLAYER && s->picnum != ROTATEGUN && s->picnum != DRONE)
|
if (Owner && Owner->s->picnum == APLAYER && s->picnum != ROTATEGUN && s->picnum != DRONE)
|
||||||
if (ps[Owner->PlayerIndex()].curr_weapon == SHOTGUN_WEAPON)
|
if (ps[Owner->PlayerIndex()].curr_weapon == SHOTGUN_WEAPON)
|
||||||
{
|
{
|
||||||
fi.shoot(targ, BLOODSPLAT3);
|
fi.shoot(targ, BLOODSPLAT3);
|
||||||
|
@ -1431,13 +1431,13 @@ void checkhitsprite_d(DDukeActor* targ, DDukeActor* proj)
|
||||||
|
|
||||||
int hitpic = pspr->picnum;
|
int hitpic = pspr->picnum;
|
||||||
auto Owner = proj->GetOwner();
|
auto Owner = proj->GetOwner();
|
||||||
if (Owner && Owner->s.picnum == APLAYER)
|
if (Owner && Owner->s->picnum == APLAYER)
|
||||||
{
|
{
|
||||||
if (s->picnum == APLAYER && ud.coop != 0 && ud.ffire == 0)
|
if (s->picnum == APLAYER && ud.coop != 0 && ud.ffire == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
auto tOwner = targ->GetOwner();
|
auto tOwner = targ->GetOwner();
|
||||||
if (isWorldTour() && hitpic == FIREBALL && tOwner && tOwner->s.picnum != FIREBALL)
|
if (isWorldTour() && hitpic == FIREBALL && tOwner && tOwner->s->picnum != FIREBALL)
|
||||||
hitpic = FLAMETHROWERFLAME;
|
hitpic = FLAMETHROWERFLAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1463,7 +1463,7 @@ void checkhitsprite_d(DDukeActor* targ, DDukeActor* proj)
|
||||||
DukeStatIterator it(STAT_ACTOR);
|
DukeStatIterator it(STAT_ACTOR);
|
||||||
while (auto j = it.Next())
|
while (auto j = it.Next())
|
||||||
{
|
{
|
||||||
if (j->s.picnum == CAMERA1) j->s.yvel = 0;
|
if (j->s->picnum == CAMERA1) j->s->yvel = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1471,7 +1471,7 @@ void checkhitsprite_d(DDukeActor* targ, DDukeActor* proj)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
auto hitowner = targ->GetHitOwner();
|
auto hitowner = targ->GetHitOwner();
|
||||||
if (!hitowner || hitowner->s.picnum != APLAYER)
|
if (!hitowner || hitowner->s->picnum != APLAYER)
|
||||||
if (ud.player_skill >= 3)
|
if (ud.player_skill >= 3)
|
||||||
pspr->extra += (pspr->extra >> 1);
|
pspr->extra += (pspr->extra >> 1);
|
||||||
}
|
}
|
||||||
|
@ -1530,7 +1530,7 @@ void checksectors_d(int snum)
|
||||||
|
|
||||||
//After this point the the player effects the map with space
|
//After this point the the player effects the map with space
|
||||||
|
|
||||||
if (chatmodeon || p->GetActor()->s.extra <= 0) return;
|
if (chatmodeon || p->GetActor()->s->extra <= 0) return;
|
||||||
|
|
||||||
if (ud.cashman && PlayerInput(snum, SB_OPEN))
|
if (ud.cashman && PlayerInput(snum, SB_OPEN))
|
||||||
fi.lotsofmoney(p->GetActor(), 2);
|
fi.lotsofmoney(p->GetActor(), 2);
|
||||||
|
@ -1578,20 +1578,20 @@ void checksectors_d(int snum)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (p->newOwner != nullptr)
|
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);
|
neartag(p->oposx, p->oposy, p->oposz, p->GetActor()->s->sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 1);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
neartag(p->posx, p->posy, p->posz, p->GetActor()->s.sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 1);
|
neartag(p->posx, p->posy, p->posz, p->GetActor()->s->sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 1);
|
||||||
if (neartagsprite == nullptr && neartagwall == -1 && neartagsector == -1)
|
if (neartagsprite == nullptr && neartagwall == -1 && neartagsector == -1)
|
||||||
neartag(p->posx, p->posy, p->posz + (8 << 8), p->GetActor()->s.sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 1);
|
neartag(p->posx, p->posy, p->posz + (8 << 8), p->GetActor()->s->sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 1);
|
||||||
if (neartagsprite == nullptr && neartagwall == -1 && neartagsector == -1)
|
if (neartagsprite == nullptr && neartagwall == -1 && neartagsector == -1)
|
||||||
neartag(p->posx, p->posy, p->posz + (16 << 8), p->GetActor()->s.sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 1);
|
neartag(p->posx, p->posy, p->posz + (16 << 8), p->GetActor()->s->sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 1);
|
||||||
if (neartagsprite == nullptr && neartagwall == -1 && neartagsector == -1)
|
if (neartagsprite == nullptr && neartagwall == -1 && neartagsector == -1)
|
||||||
{
|
{
|
||||||
neartag(p->posx, p->posy, p->posz + (16 << 8), p->GetActor()->s.sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 3);
|
neartag(p->posx, p->posy, p->posz + (16 << 8), p->GetActor()->s->sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 3);
|
||||||
if (neartagsprite != nullptr)
|
if (neartagsprite != nullptr)
|
||||||
{
|
{
|
||||||
switch (neartagsprite->s.picnum)
|
switch (neartagsprite->s->picnum)
|
||||||
{
|
{
|
||||||
case FEM1:
|
case FEM1:
|
||||||
case FEM2:
|
case FEM2:
|
||||||
|
@ -1618,8 +1618,8 @@ void checksectors_d(int snum)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p->newOwner == nullptr && neartagsprite == nullptr && neartagsector == -1 && neartagwall == -1)
|
if (p->newOwner == nullptr && neartagsprite == nullptr && neartagsector == -1 && neartagwall == -1)
|
||||||
if (isanunderoperator(sector[p->GetActor()->s.sectnum].lotag))
|
if (isanunderoperator(sector[p->GetActor()->s->sectnum].lotag))
|
||||||
neartagsector = p->GetActor()->s.sectnum;
|
neartagsector = p->GetActor()->s->sectnum;
|
||||||
|
|
||||||
if (neartagsector >= 0 && (sector[neartagsector].lotag & 16384))
|
if (neartagsector >= 0 && (sector[neartagsector].lotag & 16384))
|
||||||
return;
|
return;
|
||||||
|
@ -1638,7 +1638,7 @@ void checksectors_d(int snum)
|
||||||
{
|
{
|
||||||
if (fi.checkhitswitch(snum, -1, neartagsprite)) return;
|
if (fi.checkhitswitch(snum, -1, neartagsprite)) return;
|
||||||
|
|
||||||
switch (neartagsprite->s.picnum)
|
switch (neartagsprite->s->picnum)
|
||||||
{
|
{
|
||||||
case TOILET:
|
case TOILET:
|
||||||
case STALL:
|
case STALL:
|
||||||
|
@ -1653,13 +1653,13 @@ void checksectors_d(int snum)
|
||||||
p->holster_weapon = 1;
|
p->holster_weapon = 1;
|
||||||
p->weapon_pos = -1;
|
p->weapon_pos = -1;
|
||||||
}
|
}
|
||||||
if (p->GetActor()->s.extra <= (gs.max_player_health - (gs.max_player_health / 10)))
|
if (p->GetActor()->s->extra <= (gs.max_player_health - (gs.max_player_health / 10)))
|
||||||
{
|
{
|
||||||
p->GetActor()->s.extra += gs.max_player_health / 10;
|
p->GetActor()->s->extra += gs.max_player_health / 10;
|
||||||
p->last_extra = p->GetActor()->s.extra;
|
p->last_extra = p->GetActor()->s->extra;
|
||||||
}
|
}
|
||||||
else if (p->GetActor()->s.extra < gs.max_player_health)
|
else if (p->GetActor()->s->extra < gs.max_player_health)
|
||||||
p->GetActor()->s.extra = gs.max_player_health;
|
p->GetActor()->s->extra = gs.max_player_health;
|
||||||
}
|
}
|
||||||
else if (S_CheckActorSoundPlaying(neartagsprite, FLUSH_TOILET) == 0)
|
else if (S_CheckActorSoundPlaying(neartagsprite, FLUSH_TOILET) == 0)
|
||||||
S_PlayActorSound(FLUSH_TOILET, neartagsprite);
|
S_PlayActorSound(FLUSH_TOILET, neartagsprite);
|
||||||
|
@ -1673,9 +1673,9 @@ void checksectors_d(int snum)
|
||||||
{
|
{
|
||||||
neartagsprite->temp_data[0] = 1;
|
neartagsprite->temp_data[0] = 1;
|
||||||
neartagsprite->SetOwner(p->GetActor());
|
neartagsprite->SetOwner(p->GetActor());
|
||||||
p->buttonpalette = neartagsprite->s.pal;
|
p->buttonpalette = neartagsprite->s->pal;
|
||||||
if (p->buttonpalette)
|
if (p->buttonpalette)
|
||||||
ud.secretlevel = neartagsprite->s.lotag;
|
ud.secretlevel = neartagsprite->s->lotag;
|
||||||
else ud.secretlevel = 0;
|
else ud.secretlevel = 0;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
@ -1685,16 +1685,16 @@ void checksectors_d(int snum)
|
||||||
neartagsprite->temp_data[0] = 1;
|
neartagsprite->temp_data[0] = 1;
|
||||||
neartagsprite->SetOwner(p->GetActor());
|
neartagsprite->SetOwner(p->GetActor());
|
||||||
|
|
||||||
if (p->GetActor()->s.extra < gs.max_player_health)
|
if (p->GetActor()->s->extra < gs.max_player_health)
|
||||||
{
|
{
|
||||||
p->GetActor()->s.extra++;
|
p->GetActor()->s->extra++;
|
||||||
S_PlayActorSound(DUKE_DRINKING, p->GetActor());
|
S_PlayActorSound(DUKE_DRINKING, p->GetActor());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
case PLUG:
|
case PLUG:
|
||||||
S_PlayActorSound(SHORT_CIRCUIT, pact);
|
S_PlayActorSound(SHORT_CIRCUIT, pact);
|
||||||
p->GetActor()->s.extra -= 2 + (krand() & 3);
|
p->GetActor()->s->extra -= 2 + (krand() & 3);
|
||||||
SetPlayerPal(p, PalEntry(32, 48, 48, 64));
|
SetPlayerPal(p, PalEntry(32, 48, 48, 64));
|
||||||
break;
|
break;
|
||||||
case VIEWSCREEN:
|
case VIEWSCREEN:
|
||||||
|
@ -1703,14 +1703,14 @@ void checksectors_d(int snum)
|
||||||
DukeStatIterator it(STAT_ACTOR);
|
DukeStatIterator it(STAT_ACTOR);
|
||||||
while (auto acti = it.Next())
|
while (auto acti = it.Next())
|
||||||
{
|
{
|
||||||
auto spr = &acti->s;
|
auto spr = acti->s;
|
||||||
if (spr->picnum == CAMERA1 && spr->yvel == 0 && neartagsprite->s.hitag == spr->lotag)
|
if (spr->picnum == CAMERA1 && spr->yvel == 0 && neartagsprite->s->hitag == spr->lotag)
|
||||||
{
|
{
|
||||||
spr->yvel = 1; //Using this camera
|
spr->yvel = 1; //Using this camera
|
||||||
if (snum == screenpeek) S_PlaySound(MONITOR_ACTIVE);
|
if (snum == screenpeek) S_PlaySound(MONITOR_ACTIVE);
|
||||||
|
|
||||||
neartagsprite->SetOwner(acti);
|
neartagsprite->SetOwner(acti);
|
||||||
neartagsprite->s.yvel = 1;
|
neartagsprite->s->yvel = 1;
|
||||||
camsprite = neartagsprite;
|
camsprite = neartagsprite;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1740,7 +1740,7 @@ void checksectors_d(int snum)
|
||||||
DukeStatIterator it(STAT_ACTOR);
|
DukeStatIterator it(STAT_ACTOR);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
if (act->s.picnum == CAMERA1) act->s.yvel = 0;
|
if (act->s->picnum == CAMERA1) act->s->yvel = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (p->newOwner != nullptr)
|
else if (p->newOwner != nullptr)
|
||||||
|
@ -1782,21 +1782,21 @@ void checksectors_d(int snum)
|
||||||
DukeSectIterator it(neartagsector);
|
DukeSectIterator it(neartagsector);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
if (act->s.picnum == ACTIVATOR || act->s.picnum == MASTERSWITCH)
|
if (act->s->picnum == ACTIVATOR || act->s->picnum == MASTERSWITCH)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
operatesectors(neartagsector, p->GetActor());
|
operatesectors(neartagsector, p->GetActor());
|
||||||
}
|
}
|
||||||
else if ((sector[p->GetActor()->s.sectnum].lotag & 16384) == 0)
|
else if ((sector[p->GetActor()->s->sectnum].lotag & 16384) == 0)
|
||||||
{
|
{
|
||||||
if (isanunderoperator(sector[p->GetActor()->s.sectnum].lotag))
|
if (isanunderoperator(sector[p->GetActor()->s->sectnum].lotag))
|
||||||
{
|
{
|
||||||
DukeSectIterator it(p->GetActor()->s.sectnum);
|
DukeSectIterator it(p->GetActor()->s->sectnum);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
if (act->s.picnum == ACTIVATOR || act->s.picnum == MASTERSWITCH) return;
|
if (act->s->picnum == ACTIVATOR || act->s->picnum == MASTERSWITCH) return;
|
||||||
}
|
}
|
||||||
operatesectors(p->GetActor()->s.sectnum, p->GetActor());
|
operatesectors(p->GetActor()->s->sectnum, p->GetActor());
|
||||||
}
|
}
|
||||||
else fi.checkhitswitch(snum, neartagwall, nullptr);
|
else fi.checkhitswitch(snum, neartagwall, nullptr);
|
||||||
}
|
}
|
||||||
|
|
|
@ -306,16 +306,16 @@ void operaterespawns_r(int low)
|
||||||
DukeStatIterator it(STAT_FX);
|
DukeStatIterator it(STAT_FX);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
if (act->s.lotag == low) switch (act->s.picnum)
|
if (act->s->lotag == low) switch (act->s->picnum)
|
||||||
{
|
{
|
||||||
case RESPAWN:
|
case RESPAWN:
|
||||||
{
|
{
|
||||||
if (badguypic(act->s.hitag) && ud.monsters_off) break;
|
if (badguypic(act->s->hitag) && ud.monsters_off) break;
|
||||||
|
|
||||||
auto star = spawn(act, TRANSPORTERSTAR);
|
auto star = spawn(act, TRANSPORTERSTAR);
|
||||||
star->s.z -= (32 << 8);
|
star->s->z -= (32 << 8);
|
||||||
|
|
||||||
act->s.extra = 66 - 12; // Just a way to killit
|
act->s->extra = 66 - 12; // Just a way to killit
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case RRTILE7424:
|
case RRTILE7424:
|
||||||
|
@ -356,13 +356,13 @@ bool checkhitswitch_r(int snum, int ww, DDukeActor* act)
|
||||||
|
|
||||||
if (act)
|
if (act)
|
||||||
{
|
{
|
||||||
lotag = act->s.lotag;
|
lotag = act->s->lotag;
|
||||||
if (lotag == 0) return 0;
|
if (lotag == 0) return 0;
|
||||||
hitag = act->s.hitag;
|
hitag = act->s->hitag;
|
||||||
sx = act->s.x;
|
sx = act->s->x;
|
||||||
sy = act->s.y;
|
sy = act->s->y;
|
||||||
picnum = act->s.picnum;
|
picnum = act->s->picnum;
|
||||||
switchpal = act->s.pal;
|
switchpal = act->s->pal;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -489,7 +489,7 @@ bool checkhitswitch_r(int snum, int ww, DDukeActor* act)
|
||||||
DukeStatIterator it(STAT_DEFAULT);
|
DukeStatIterator it(STAT_DEFAULT);
|
||||||
while (auto other = it.Next())
|
while (auto other = it.Next())
|
||||||
{
|
{
|
||||||
auto si = &other->s;
|
auto si = other->s;
|
||||||
if (lotag == si->lotag) switch (si->picnum)
|
if (lotag == si->lotag) switch (si->picnum)
|
||||||
{
|
{
|
||||||
case DIPSWITCH:
|
case DIPSWITCH:
|
||||||
|
@ -554,14 +554,14 @@ bool checkhitswitch_r(int snum, int ww, DDukeActor* act)
|
||||||
DukeStatIterator it1(107);
|
DukeStatIterator it1(107);
|
||||||
while (auto other2 = it1.Next())
|
while (auto other2 = it1.Next())
|
||||||
{
|
{
|
||||||
if (other2->s.picnum == RRTILE3410)
|
if (other2->s->picnum == RRTILE3410)
|
||||||
{
|
{
|
||||||
other2->s.picnum++;
|
other2->s->picnum++;
|
||||||
other2->s.hitag = 100;
|
other2->s->hitag = 100;
|
||||||
other2->s.extra = 0;
|
other2->s->extra = 0;
|
||||||
S_PlayActorSound(474, other2);
|
S_PlayActorSound(474, other2);
|
||||||
}
|
}
|
||||||
else if (other2->s.picnum == RRTILE295)
|
else if (other2->s->picnum == RRTILE295)
|
||||||
deletesprite(other2);
|
deletesprite(other2);
|
||||||
}
|
}
|
||||||
si->picnum++;
|
si->picnum++;
|
||||||
|
@ -762,11 +762,11 @@ bool checkhitswitch_r(int snum, int ww, DDukeActor* act)
|
||||||
{
|
{
|
||||||
BellTime = 132;
|
BellTime = 132;
|
||||||
BellSprite = act;
|
BellSprite = act;
|
||||||
act->s.picnum++;
|
act->s->picnum++;
|
||||||
}
|
}
|
||||||
else if (picnum == RRTILE8464)
|
else if (picnum == RRTILE8464)
|
||||||
{
|
{
|
||||||
act->s.picnum = act->s.picnum + 1;
|
act->s->picnum = act->s->picnum + 1;
|
||||||
if (hitag == 10001)
|
if (hitag == 10001)
|
||||||
{
|
{
|
||||||
if (ps[snum].SeaSick == 0)
|
if (ps[snum].SeaSick == 0)
|
||||||
|
@ -790,8 +790,8 @@ bool checkhitswitch_r(int snum, int ww, DDukeActor* act)
|
||||||
DukeLinearSpriteIterator it;
|
DukeLinearSpriteIterator it;
|
||||||
while (auto actt = it.Next())
|
while (auto actt = it.Next())
|
||||||
{
|
{
|
||||||
int jpn = actt->s.picnum;
|
int jpn = actt->s->picnum;
|
||||||
int jht = actt->s.hitag;
|
int jht = actt->s->hitag;
|
||||||
if ((jpn == MULTISWITCH || jpn == MULTISWITCH2) && jht == 10000)
|
if ((jpn == MULTISWITCH || jpn == MULTISWITCH2) && jht == 10000)
|
||||||
{
|
{
|
||||||
if (switchcount < 3)
|
if (switchcount < 3)
|
||||||
|
@ -806,11 +806,11 @@ bool checkhitswitch_r(int snum, int ww, DDukeActor* act)
|
||||||
S_PlaySound3D(78, act, &v);
|
S_PlaySound3D(78, act, &v);
|
||||||
for (j = 0; j < switchcount; j++)
|
for (j = 0; j < switchcount; j++)
|
||||||
{
|
{
|
||||||
switches[j]->s.hitag = 0;
|
switches[j]->s->hitag = 0;
|
||||||
if (picnum >= MULTISWITCH2)
|
if (picnum >= MULTISWITCH2)
|
||||||
switches[j]->s.picnum = MULTISWITCH2 + 3;
|
switches[j]->s->picnum = MULTISWITCH2 + 3;
|
||||||
else
|
else
|
||||||
switches[j]->s.picnum = MULTISWITCH + 3;
|
switches[j]->s->picnum = MULTISWITCH + 3;
|
||||||
checkhitswitch_r(snum, -1, switches[j]);
|
checkhitswitch_r(snum, -1, switches[j]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -831,16 +831,16 @@ bool checkhitswitch_r(int snum, int ww, DDukeActor* act)
|
||||||
DukeStatIterator it(STAT_EFFECTOR);
|
DukeStatIterator it(STAT_EFFECTOR);
|
||||||
while (auto other = it.Next())
|
while (auto other = it.Next())
|
||||||
{
|
{
|
||||||
if (other->s.hitag == lotag)
|
if (other->s->hitag == lotag)
|
||||||
{
|
{
|
||||||
switch (other->s.lotag)
|
switch (other->s->lotag)
|
||||||
{
|
{
|
||||||
case 46:
|
case 46:
|
||||||
case SE_47_LIGHT_SWITCH:
|
case SE_47_LIGHT_SWITCH:
|
||||||
case SE_48_LIGHT_SWITCH:
|
case SE_48_LIGHT_SWITCH:
|
||||||
if (!isRRRA()) break;
|
if (!isRRRA()) break;
|
||||||
case SE_12_LIGHT_SWITCH:
|
case SE_12_LIGHT_SWITCH:
|
||||||
sector[other->s.sectnum].floorpal = 0;
|
sector[other->s->sectnum].floorpal = 0;
|
||||||
other->temp_data[0]++;
|
other->temp_data[0]++;
|
||||||
if (other->temp_data[0] == 2)
|
if (other->temp_data[0] == 2)
|
||||||
other->temp_data[0]++;
|
other->temp_data[0]++;
|
||||||
|
@ -901,9 +901,9 @@ void activatebysector_r(int sect, DDukeActor* activator)
|
||||||
DukeSectIterator it(sect);
|
DukeSectIterator it(sect);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
if (act->s.picnum == ACTIVATOR)
|
if (act->s->picnum == ACTIVATOR)
|
||||||
{
|
{
|
||||||
operateactivators(act->s.lotag, -1);
|
operateactivators(act->s->lotag, -1);
|
||||||
// return;
|
// return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -925,7 +925,7 @@ static void lotsofpopcorn(DDukeActor *actor, short wallnum, short n)
|
||||||
short sect, a;
|
short sect, a;
|
||||||
|
|
||||||
sect = -1;
|
sect = -1;
|
||||||
auto sp = &actor->s;
|
auto sp = actor->s;
|
||||||
|
|
||||||
if (wallnum < 0)
|
if (wallnum < 0)
|
||||||
{
|
{
|
||||||
|
@ -1031,7 +1031,7 @@ void checkhitwall_r(DDukeActor* spr, int dawallnum, int x, int y, int z, int atw
|
||||||
wall[wal->nextwall].cstat = 0;
|
wall[wal->nextwall].cstat = 0;
|
||||||
|
|
||||||
auto spawned = EGS(sn, x, y, z, SECTOREFFECTOR, 0, 0, 0, ps[0].angle.ang.asbuild(), 0, 0, spr, 3);
|
auto spawned = EGS(sn, x, y, z, SECTOREFFECTOR, 0, 0, 0, ps[0].angle.ang.asbuild(), 0, 0, spr, 3);
|
||||||
spawned->s.lotag = 128;
|
spawned->s->lotag = 128;
|
||||||
spawned->temp_data[1] = 2;
|
spawned->temp_data[1] = 2;
|
||||||
spawned->temp_data[2] = dawallnum;
|
spawned->temp_data[2] = dawallnum;
|
||||||
S_PlayActorSound(GLASS_BREAKING, spawned);
|
S_PlayActorSound(GLASS_BREAKING, spawned);
|
||||||
|
@ -1048,7 +1048,7 @@ void checkhitwall_r(DDukeActor* spr, int dawallnum, int x, int y, int z, int atw
|
||||||
wall[wal->nextwall].cstat = 0;
|
wall[wal->nextwall].cstat = 0;
|
||||||
|
|
||||||
auto spawned = EGS(sn, x, y, z, SECTOREFFECTOR, 0, 0, 0, ps[0].angle.ang.asbuild(), 0, 0, spr, 3);
|
auto spawned = EGS(sn, x, y, z, SECTOREFFECTOR, 0, 0, 0, ps[0].angle.ang.asbuild(), 0, 0, spr, 3);
|
||||||
spawned->s.lotag = 128;
|
spawned->s->lotag = 128;
|
||||||
spawned->temp_data[1] = 2;
|
spawned->temp_data[1] = 2;
|
||||||
spawned->temp_data[2] = dawallnum;
|
spawned->temp_data[2] = dawallnum;
|
||||||
S_PlayActorSound(GLASS_BREAKING, spawned);
|
S_PlayActorSound(GLASS_BREAKING, spawned);
|
||||||
|
@ -1082,7 +1082,7 @@ void checkhitwall_r(DDukeActor* spr, int dawallnum, int x, int y, int z, int atw
|
||||||
DukeSectIterator it(sect);
|
DukeSectIterator it(sect);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
s = &act->s;
|
s = act->s;
|
||||||
if (s->lotag == 6)
|
if (s->lotag == 6)
|
||||||
{
|
{
|
||||||
//for (j = 0; j < 16; j++) RANDOMSCRAP(s, -1); This never spawned anything due to the -1.
|
//for (j = 0; j < 16; j++) RANDOMSCRAP(s, -1); This never spawned anything due to the -1.
|
||||||
|
@ -1094,7 +1094,7 @@ void checkhitwall_r(DDukeActor* spr, int dawallnum, int x, int y, int z, int atw
|
||||||
for (i = startwall; i < endwall; i++)
|
for (i = startwall; i < endwall; i++)
|
||||||
sector[wall[i].nextsector].lotag = 0;
|
sector[wall[i].nextsector].lotag = 0;
|
||||||
sector[s->sectnum].lotag = 0;
|
sector[s->sectnum].lotag = 0;
|
||||||
S_StopSound(act->s.lotag);
|
S_StopSound(act->s->lotag);
|
||||||
S_PlayActorSound(400, act);
|
S_PlayActorSound(400, act);
|
||||||
deletesprite(act);
|
deletesprite(act);
|
||||||
}
|
}
|
||||||
|
@ -1355,7 +1355,7 @@ void checkhitwall_r(DDukeActor* spr, int dawallnum, int x, int y, int z, int atw
|
||||||
DukeStatIterator it(STAT_EFFECTOR);
|
DukeStatIterator it(STAT_EFFECTOR);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
if (act->s.hitag == wall[dawallnum].lotag && act->s.lotag == 3)
|
if (act->s->hitag == wall[dawallnum].lotag && act->s->lotag == 3)
|
||||||
{
|
{
|
||||||
act->temp_data[2] = j;
|
act->temp_data[2] = j;
|
||||||
act->temp_data[3] = darkestwall;
|
act->temp_data[3] = darkestwall;
|
||||||
|
@ -1376,7 +1376,7 @@ void checkplayerhurt_r(struct player_struct* p, const Collision &coll)
|
||||||
{
|
{
|
||||||
if (coll.type == kHitSprite)
|
if (coll.type == kHitSprite)
|
||||||
{
|
{
|
||||||
switch (coll.actor->s.picnum)
|
switch (coll.actor->s->picnum)
|
||||||
{
|
{
|
||||||
case RRTILE2430:
|
case RRTILE2430:
|
||||||
case RRTILE2431:
|
case RRTILE2431:
|
||||||
|
@ -1387,7 +1387,7 @@ void checkplayerhurt_r(struct player_struct* p, const Collision &coll)
|
||||||
case RRTILE2455:
|
case RRTILE2455:
|
||||||
if (isRRRA() && p->hurt_delay2 < 8)
|
if (isRRRA() && p->hurt_delay2 < 8)
|
||||||
{
|
{
|
||||||
p->GetActor()->s.extra -= 2;
|
p->GetActor()->s->extra -= 2;
|
||||||
p->hurt_delay2 = 16;
|
p->hurt_delay2 = 16;
|
||||||
SetPlayerPal(p, PalEntry(32, 32, 0, 0));
|
SetPlayerPal(p, PalEntry(32, 32, 0, 0));
|
||||||
S_PlayActorSound(DUKE_LONGTERM_PAIN, p->GetActor());
|
S_PlayActorSound(DUKE_LONGTERM_PAIN, p->GetActor());
|
||||||
|
@ -1396,7 +1396,7 @@ void checkplayerhurt_r(struct player_struct* p, const Collision &coll)
|
||||||
case CACTUS:
|
case CACTUS:
|
||||||
if (!isRRRA() && p->hurt_delay < 8)
|
if (!isRRRA() && p->hurt_delay < 8)
|
||||||
{
|
{
|
||||||
p->GetActor()->s.extra -= 5;
|
p->GetActor()->s->extra -= 5;
|
||||||
p->hurt_delay = 16;
|
p->hurt_delay = 16;
|
||||||
SetPlayerPal(p, PalEntry(32, 32, 0, 0));
|
SetPlayerPal(p, PalEntry(32, 32, 0, 0));
|
||||||
S_PlayActorSound(DUKE_LONGTERM_PAIN, p->GetActor());
|
S_PlayActorSound(DUKE_LONGTERM_PAIN, p->GetActor());
|
||||||
|
@ -1494,13 +1494,13 @@ bool checkhitceiling_r(int sn)
|
||||||
DukeSectIterator it(sn);
|
DukeSectIterator it(sn);
|
||||||
while (auto act1 = it.Next())
|
while (auto act1 = it.Next())
|
||||||
{
|
{
|
||||||
auto spr1 = &act1->s;
|
auto spr1 = act1->s;
|
||||||
if (spr1->picnum == SECTOREFFECTOR && (spr1->lotag == 12 || (isRRRA() && (spr1->lotag == 47 || spr1->lotag == 48))))
|
if (spr1->picnum == SECTOREFFECTOR && (spr1->lotag == 12 || (isRRRA() && (spr1->lotag == 47 || spr1->lotag == 48))))
|
||||||
{
|
{
|
||||||
DukeStatIterator it(STAT_EFFECTOR);
|
DukeStatIterator it(STAT_EFFECTOR);
|
||||||
while (auto act2 = it.Next())
|
while (auto act2 = it.Next())
|
||||||
{
|
{
|
||||||
if (act2->s.hitag == spr1->hitag)
|
if (act2->s->hitag == spr1->hitag)
|
||||||
act2->temp_data[3] = 1;
|
act2->temp_data[3] = 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1512,7 +1512,7 @@ bool checkhitceiling_r(int sn)
|
||||||
DukeStatIterator it(STAT_EFFECTOR);
|
DukeStatIterator it(STAT_EFFECTOR);
|
||||||
while (auto act1 = it.Next())
|
while (auto act1 = it.Next())
|
||||||
{
|
{
|
||||||
auto spr1 = &act1->s;
|
auto spr1 = act1->s;
|
||||||
if (spr1->hitag == (sector[sn].hitag) && spr1->lotag == 3)
|
if (spr1->hitag == (sector[sn].hitag) && spr1->lotag == 3)
|
||||||
{
|
{
|
||||||
act1->temp_data[2] = j;
|
act1->temp_data[2] = j;
|
||||||
|
@ -1535,8 +1535,8 @@ bool checkhitceiling_r(int sn)
|
||||||
void checkhitsprite_r(DDukeActor* targ, DDukeActor* proj)
|
void checkhitsprite_r(DDukeActor* targ, DDukeActor* proj)
|
||||||
{
|
{
|
||||||
int j, k, p;
|
int j, k, p;
|
||||||
spritetype* s = &targ->s;
|
spritetype* s = targ->s;
|
||||||
auto pspr = &proj->s;
|
auto pspr = proj->s;
|
||||||
|
|
||||||
if (isRRRA()) switch (s->picnum)
|
if (isRRRA()) switch (s->picnum)
|
||||||
{
|
{
|
||||||
|
@ -1918,10 +1918,10 @@ void checkhitsprite_r(DDukeActor* targ, DDukeActor* proj)
|
||||||
DukeSpriteIterator it;
|
DukeSpriteIterator it;
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
if (act->s.picnum == RRTILE8679 && act->s.pal == 4)
|
if (act->s->picnum == RRTILE8679 && act->s->pal == 4)
|
||||||
{
|
{
|
||||||
if (act->s.lotag == s->lotag)
|
if (act->s->lotag == s->lotag)
|
||||||
act->s.picnum = RRTILE8680;
|
act->s->picnum = RRTILE8680;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1944,8 +1944,8 @@ void checkhitsprite_r(DDukeActor* targ, DDukeActor* proj)
|
||||||
DukeSpriteIterator it;
|
DukeSpriteIterator it;
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
if (act->s.picnum == RRTILE8094)
|
if (act->s->picnum == RRTILE8094)
|
||||||
act->s.picnum = RRTILE5088;
|
act->s->picnum = RRTILE5088;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1958,10 +1958,10 @@ void checkhitsprite_r(DDukeActor* targ, DDukeActor* proj)
|
||||||
DukeSpriteIterator it;
|
DukeSpriteIterator it;
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
if (act->s.picnum == RRTILE2431 && act->s.pal == 4)
|
if (act->s->picnum == RRTILE2431 && act->s->pal == 4)
|
||||||
{
|
{
|
||||||
if (s->lotag == act->s.lotag)
|
if (s->lotag == act->s->lotag)
|
||||||
act->s.picnum = RRTILE2451;
|
act->s->picnum = RRTILE2451;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1985,14 +1985,14 @@ void checkhitsprite_r(DDukeActor* targ, DDukeActor* proj)
|
||||||
DukeSpriteIterator it;
|
DukeSpriteIterator it;
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
if (act->s.picnum == RRTILE2451 && act->s.pal == 4)
|
if (act->s->picnum == RRTILE2451 && act->s->pal == 4)
|
||||||
{
|
{
|
||||||
if (s->lotag == act->s.lotag)
|
if (s->lotag == act->s->lotag)
|
||||||
{
|
{
|
||||||
fi.guts(targ, RRTILE2460, 12, myconnectindex);
|
fi.guts(targ, RRTILE2460, 12, myconnectindex);
|
||||||
fi.guts(targ, RRTILE2465, 3, myconnectindex);
|
fi.guts(targ, RRTILE2465, 3, myconnectindex);
|
||||||
act->s.xrepeat = 0;
|
act->s->xrepeat = 0;
|
||||||
act->s.yrepeat = 0;
|
act->s->yrepeat = 0;
|
||||||
s->xrepeat = 0;
|
s->xrepeat = 0;
|
||||||
s->yrepeat = 0;
|
s->yrepeat = 0;
|
||||||
}
|
}
|
||||||
|
@ -2160,7 +2160,7 @@ void checkhitsprite_r(DDukeActor* targ, DDukeActor* proj)
|
||||||
for (k = 0; k < 64; k++)
|
for (k = 0; k < 64; k++)
|
||||||
{
|
{
|
||||||
auto j = EGS(s->sectnum, s->x, s->y, s->z - (krand() % (48 << 8)), SCRAP6 + (krand() & 3), -8, 48, 48, krand() & 2047, (krand() & 63) + 64, -(krand() & 4095) - (s->zvel >> 2), targ, 5);
|
auto j = EGS(s->sectnum, s->x, s->y, s->z - (krand() % (48 << 8)), SCRAP6 + (krand() & 3), -8, 48, 48, krand() & 2047, (krand() & 63) + 64, -(krand() & 4095) - (s->zvel >> 2), targ, 5);
|
||||||
j->s.pal = 8;
|
j->s->pal = 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (s->picnum == CACTUS)
|
if (s->picnum == CACTUS)
|
||||||
|
@ -2316,7 +2316,7 @@ void checkhitsprite_r(DDukeActor* targ, DDukeActor* proj)
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
auto j = spawn(targ, STEAM);
|
auto j = spawn(targ, STEAM);
|
||||||
j->s.z = sector[s->sectnum].floorz - (32 << 8);
|
j->s->z = sector[s->sectnum].floorz - (32 << 8);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -2341,7 +2341,7 @@ void checkhitsprite_r(DDukeActor* targ, DDukeActor* proj)
|
||||||
case PLAYERONWATER:
|
case PLAYERONWATER:
|
||||||
targ = targ->GetOwner();
|
targ = targ->GetOwner();
|
||||||
if (!targ) break;
|
if (!targ) break;
|
||||||
s = &targ->s;
|
s = targ->s;
|
||||||
default:
|
default:
|
||||||
if ((s->cstat & 16) && s->hitag == 0 && s->lotag == 0 && s->statnum == 0)
|
if ((s->cstat & 16) && s->hitag == 0 && s->lotag == 0 && s->statnum == 0)
|
||||||
break;
|
break;
|
||||||
|
@ -2359,16 +2359,16 @@ void checkhitsprite_r(DDukeActor* targ, DDukeActor* proj)
|
||||||
{
|
{
|
||||||
auto spawned = spawn(proj, JIBS6);
|
auto spawned = spawn(proj, JIBS6);
|
||||||
if (pspr->pal == 6)
|
if (pspr->pal == 6)
|
||||||
spawned->s.pal = 6;
|
spawned->s->pal = 6;
|
||||||
spawned->s.z += (4 << 8);
|
spawned->s->z += (4 << 8);
|
||||||
spawned->s.xvel = 16;
|
spawned->s->xvel = 16;
|
||||||
spawned->s.xrepeat = spawned->s.yrepeat = 24;
|
spawned->s->xrepeat = spawned->s->yrepeat = 24;
|
||||||
spawned->s.ang += 32 - (krand() & 63);
|
spawned->s->ang += 32 - (krand() & 63);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto Owner = proj->GetOwner();
|
auto Owner = proj->GetOwner();
|
||||||
|
|
||||||
if (Owner && Owner->s.picnum == APLAYER && s->picnum != DRONE)
|
if (Owner && Owner->s->picnum == APLAYER && s->picnum != DRONE)
|
||||||
if (ps[Owner->PlayerIndex()].curr_weapon == SHOTGUN_WEAPON)
|
if (ps[Owner->PlayerIndex()].curr_weapon == SHOTGUN_WEAPON)
|
||||||
{
|
{
|
||||||
fi.shoot(targ, BLOODSPLAT3);
|
fi.shoot(targ, BLOODSPLAT3);
|
||||||
|
@ -2411,11 +2411,11 @@ void checkhitsprite_r(DDukeActor* targ, DDukeActor* proj)
|
||||||
DukeStatIterator it(STAT_EFFECTOR);
|
DukeStatIterator it(STAT_EFFECTOR);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
if (act->s.picnum == CAMERA1) act->s.yvel = 0;
|
if (act->s->picnum == CAMERA1) act->s->yvel = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
auto Owner = targ->GetHitOwner();
|
auto Owner = targ->GetHitOwner();
|
||||||
if (!Owner || Owner->s.picnum != APLAYER)
|
if (!Owner || Owner->s->picnum != APLAYER)
|
||||||
if (ud.player_skill >= 3)
|
if (ud.player_skill >= 3)
|
||||||
pspr->extra += (pspr->extra >> 1);
|
pspr->extra += (pspr->extra >> 1);
|
||||||
}
|
}
|
||||||
|
@ -2478,7 +2478,7 @@ void checksectors_r(int snum)
|
||||||
|
|
||||||
//After this point the the player effects the map with space
|
//After this point the the player effects the map with space
|
||||||
|
|
||||||
if (chatmodeon || p->GetActor()->s.extra <= 0) return;
|
if (chatmodeon || p->GetActor()->s->extra <= 0) return;
|
||||||
|
|
||||||
if (ud.cashman && PlayerInput(snum, SB_OPEN))
|
if (ud.cashman && PlayerInput(snum, SB_OPEN))
|
||||||
fi.lotsofmoney(p->GetActor(), 2);
|
fi.lotsofmoney(p->GetActor(), 2);
|
||||||
|
@ -2552,24 +2552,24 @@ void checksectors_r(int snum)
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
neartag(p->posx, p->posy, p->posz, p->GetActor()->s.sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 3);
|
neartag(p->posx, p->posy, p->posz, p->GetActor()->s->sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p->newOwner != nullptr)
|
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);
|
neartag(p->oposx, p->oposy, p->oposz, p->GetActor()->s->sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 1);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
neartag(p->posx, p->posy, p->posz, p->GetActor()->s.sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 1);
|
neartag(p->posx, p->posy, p->posz, p->GetActor()->s->sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 1);
|
||||||
if (neartagsprite == nullptr && neartagwall == -1 && neartagsector == -1)
|
if (neartagsprite == nullptr && neartagwall == -1 && neartagsector == -1)
|
||||||
neartag(p->posx, p->posy, p->posz + (8 << 8), p->GetActor()->s.sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 1);
|
neartag(p->posx, p->posy, p->posz + (8 << 8), p->GetActor()->s->sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 1);
|
||||||
if (neartagsprite == nullptr && neartagwall == -1 && neartagsector == -1)
|
if (neartagsprite == nullptr && neartagwall == -1 && neartagsector == -1)
|
||||||
neartag(p->posx, p->posy, p->posz + (16 << 8), p->GetActor()->s.sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 1);
|
neartag(p->posx, p->posy, p->posz + (16 << 8), p->GetActor()->s->sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 1);
|
||||||
if (neartagsprite == nullptr && neartagwall == -1 && neartagsector == -1)
|
if (neartagsprite == nullptr && neartagwall == -1 && neartagsector == -1)
|
||||||
{
|
{
|
||||||
neartag(p->posx, p->posy, p->posz + (16 << 8), p->GetActor()->s.sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 3);
|
neartag(p->posx, p->posy, p->posz + (16 << 8), p->GetActor()->s->sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 3);
|
||||||
if (neartagsprite != nullptr)
|
if (neartagsprite != nullptr)
|
||||||
{
|
{
|
||||||
switch (neartagsprite->s.picnum)
|
switch (neartagsprite->s->picnum)
|
||||||
{
|
{
|
||||||
case FEM10:
|
case FEM10:
|
||||||
case NAKED1:
|
case NAKED1:
|
||||||
|
@ -2589,8 +2589,8 @@ void checksectors_r(int snum)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p->newOwner == nullptr && neartagsprite == nullptr && neartagsector == -1 && neartagwall == -1)
|
if (p->newOwner == nullptr && neartagsprite == nullptr && neartagsector == -1 && neartagwall == -1)
|
||||||
if (isanunderoperator(sector[p->GetActor()->s.sectnum].lotag))
|
if (isanunderoperator(sector[p->GetActor()->s->sectnum].lotag))
|
||||||
neartagsector = p->GetActor()->s.sectnum;
|
neartagsector = p->GetActor()->s->sectnum;
|
||||||
|
|
||||||
if (neartagsector >= 0 && (sector[neartagsector].lotag & 16384))
|
if (neartagsector >= 0 && (sector[neartagsector].lotag & 16384))
|
||||||
return;
|
return;
|
||||||
|
@ -2608,7 +2608,7 @@ void checksectors_r(int snum)
|
||||||
{
|
{
|
||||||
if (fi.checkhitswitch(snum, -1,neartagsprite)) return;
|
if (fi.checkhitswitch(snum, -1,neartagsprite)) return;
|
||||||
|
|
||||||
switch (neartagsprite->s.picnum)
|
switch (neartagsprite->s->picnum)
|
||||||
{
|
{
|
||||||
case RRTILE8448:
|
case RRTILE8448:
|
||||||
if (!isRRRA()) return;
|
if (!isRRRA()) return;
|
||||||
|
@ -2657,7 +2657,7 @@ void checksectors_r(int snum)
|
||||||
case RRTILE8594:
|
case RRTILE8594:
|
||||||
case RRTILE8595:
|
case RRTILE8595:
|
||||||
if (!isRRRA()) return;
|
if (!isRRRA()) return;
|
||||||
neartagsprite->s.extra = 60;
|
neartagsprite->s->extra = 60;
|
||||||
S_PlayActorSound(235, neartagsprite);
|
S_PlayActorSound(235, neartagsprite);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -2676,13 +2676,13 @@ void checksectors_r(int snum)
|
||||||
p->holster_weapon = 1;
|
p->holster_weapon = 1;
|
||||||
p->weapon_pos = -1;
|
p->weapon_pos = -1;
|
||||||
}
|
}
|
||||||
if (p->GetActor()->s.extra <= (gs.max_player_health - (gs.max_player_health / 10)))
|
if (p->GetActor()->s->extra <= (gs.max_player_health - (gs.max_player_health / 10)))
|
||||||
{
|
{
|
||||||
p->GetActor()->s.extra += gs.max_player_health / 10;
|
p->GetActor()->s->extra += gs.max_player_health / 10;
|
||||||
p->last_extra = p->GetActor()->s.extra;
|
p->last_extra = p->GetActor()->s->extra;
|
||||||
}
|
}
|
||||||
else if (p->GetActor()->s.extra < gs.max_player_health)
|
else if (p->GetActor()->s->extra < gs.max_player_health)
|
||||||
p->GetActor()->s.extra = gs.max_player_health;
|
p->GetActor()->s->extra = gs.max_player_health;
|
||||||
}
|
}
|
||||||
else if (S_CheckActorSoundPlaying(pact, DUKE_GRUNT) == 0)
|
else if (S_CheckActorSoundPlaying(pact, DUKE_GRUNT) == 0)
|
||||||
S_PlayActorSound(DUKE_GRUNT, pact);
|
S_PlayActorSound(DUKE_GRUNT, pact);
|
||||||
|
@ -2693,16 +2693,16 @@ void checksectors_r(int snum)
|
||||||
neartagsprite->temp_data[0] = 1;
|
neartagsprite->temp_data[0] = 1;
|
||||||
neartagsprite->SetOwner(p->GetActor());
|
neartagsprite->SetOwner(p->GetActor());
|
||||||
|
|
||||||
if (p->GetActor()->s.extra < gs.max_player_health)
|
if (p->GetActor()->s->extra < gs.max_player_health)
|
||||||
{
|
{
|
||||||
p->GetActor()->s.extra++;
|
p->GetActor()->s->extra++;
|
||||||
S_PlayActorSound(DUKE_DRINKING, pact);
|
S_PlayActorSound(DUKE_DRINKING, pact);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
case PLUG:
|
case PLUG:
|
||||||
S_PlayActorSound(SHORT_CIRCUIT, pact);
|
S_PlayActorSound(SHORT_CIRCUIT, pact);
|
||||||
p->GetActor()->s.extra -= 2 + (krand() & 3);
|
p->GetActor()->s->extra -= 2 + (krand() & 3);
|
||||||
SetPlayerPal(p, PalEntry(32, 48, 48, 64));
|
SetPlayerPal(p, PalEntry(32, 48, 48, 64));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -2735,7 +2735,7 @@ void checksectors_r(int snum)
|
||||||
DukeSectIterator it(neartagsector);
|
DukeSectIterator it(neartagsector);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
if (act->s.picnum == ACTIVATOR || act->s.picnum == MASTERSWITCH)
|
if (act->s->picnum == ACTIVATOR || act->s->picnum == MASTERSWITCH)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (haskey(neartagsector, snum))
|
if (haskey(neartagsector, snum))
|
||||||
|
@ -2749,18 +2749,18 @@ void checksectors_r(int snum)
|
||||||
FTA(41, p);
|
FTA(41, p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ((sector[p->GetActor()->s.sectnum].lotag & 16384) == 0)
|
else if ((sector[p->GetActor()->s->sectnum].lotag & 16384) == 0)
|
||||||
{
|
{
|
||||||
if (isanunderoperator(sector[p->GetActor()->s.sectnum].lotag))
|
if (isanunderoperator(sector[p->GetActor()->s->sectnum].lotag))
|
||||||
{
|
{
|
||||||
DukeSectIterator it(p->GetActor()->s.sectnum);
|
DukeSectIterator it(p->GetActor()->s->sectnum);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
if (act->s.picnum == ACTIVATOR || act->s.picnum == MASTERSWITCH)
|
if (act->s->picnum == ACTIVATOR || act->s->picnum == MASTERSWITCH)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (haskey(neartagsector, snum))
|
if (haskey(neartagsector, snum))
|
||||||
operatesectors(p->GetActor()->s.sectnum, p->GetActor());
|
operatesectors(p->GetActor()->s->sectnum, p->GetActor());
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (neartagsprite && neartagsprite->spriteextra > 3)
|
if (neartagsprite && neartagsprite->spriteextra > 3)
|
||||||
|
@ -2904,7 +2904,7 @@ void tearitup(int sect)
|
||||||
DukeSectIterator it(sect);
|
DukeSectIterator it(sect);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
if (act->s.picnum == DESTRUCTO)
|
if (act->s->picnum == DESTRUCTO)
|
||||||
{
|
{
|
||||||
act->picnum = SHOTSPARK1;
|
act->picnum = SHOTSPARK1;
|
||||||
act->extra = 1;
|
act->extra = 1;
|
||||||
|
|
|
@ -56,7 +56,7 @@ BEGIN_DUKE_NS
|
||||||
// These are needed until real objects can be used for actors.
|
// These are needed until real objects can be used for actors.
|
||||||
inline void* sndActor(DDukeActor* actor)
|
inline void* sndActor(DDukeActor* actor)
|
||||||
{
|
{
|
||||||
return actor ? &actor->s : nullptr;
|
return actor ? actor->s : nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline DDukeActor* getSndActor(const void* source)
|
inline DDukeActor* getSndActor(const void* source)
|
||||||
|
@ -124,7 +124,7 @@ public:
|
||||||
{
|
{
|
||||||
UnloadSound(schan->SoundID);
|
UnloadSound(schan->SoundID);
|
||||||
currentCommentarySound = 0;
|
currentCommentarySound = 0;
|
||||||
currentCommentarySprite->s.picnum = DEVELOPERCOMMENTARY;
|
currentCommentarySprite->s->picnum = DEVELOPERCOMMENTARY;
|
||||||
I_SetRelativeVolume(1.0f);
|
I_SetRelativeVolume(1.0f);
|
||||||
UnmuteSounds();
|
UnmuteSounds();
|
||||||
}
|
}
|
||||||
|
@ -257,7 +257,7 @@ int S_DefineSound(unsigned index, const char *filename, int minpitch, int maxpit
|
||||||
|
|
||||||
inline bool S_IsAmbientSFX(DDukeActor* actor)
|
inline bool S_IsAmbientSFX(DDukeActor* actor)
|
||||||
{
|
{
|
||||||
return (actor->s.picnum == MUSICANDSFX && actor->s.lotag < 999);
|
return (actor->s->picnum == MUSICANDSFX && actor->s->lotag < 999);
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
@ -272,7 +272,7 @@ static int GetPositionInfo(DDukeActor* actor, int soundNum, int sectNum,
|
||||||
// There's a lot of hackery going on here that could be mapped to rolloff and attenuation parameters.
|
// There's a lot of hackery going on here that could be mapped to rolloff and attenuation parameters.
|
||||||
// However, ultimately rolloff would also just reposition the sound source so this can remain as it is.
|
// However, ultimately rolloff would also just reposition the sound source so this can remain as it is.
|
||||||
|
|
||||||
auto sp = &actor->s;
|
auto sp = actor->s;
|
||||||
int orgsndist = 0, sndang = 0, sndist = 0, explosion = 0;
|
int orgsndist = 0, sndang = 0, sndist = 0, explosion = 0;
|
||||||
auto const* snd = soundEngine->GetUserData(soundNum + 1);
|
auto const* snd = soundEngine->GetUserData(soundNum + 1);
|
||||||
int userflags = snd ? snd[kFlags] : 0;
|
int userflags = snd ? snd[kFlags] : 0;
|
||||||
|
@ -337,9 +337,9 @@ void S_GetCamera(vec3_t** c, int32_t* ca, int32_t* cs)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (c) *c = &ud.cameraactor->s.pos;
|
if (c) *c = &ud.cameraactor->s->pos;
|
||||||
if (cs) *cs = ud.cameraactor->s.sectnum;
|
if (cs) *cs = ud.cameraactor->s->sectnum;
|
||||||
if (ca) *ca = ud.cameraactor->s.ang;
|
if (ca) *ca = ud.cameraactor->s->ang;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -370,11 +370,11 @@ void DukeSoundEngine::CalcPosVel(int type, const void* source, const float pt[3]
|
||||||
else if (type == SOURCE_Actor)
|
else if (type == SOURCE_Actor)
|
||||||
{
|
{
|
||||||
auto aactor = getSndActor(source);
|
auto aactor = getSndActor(source);
|
||||||
auto actor = aactor ? &aactor->s : nullptr;
|
auto aspr = aactor ? aactor->s : nullptr;
|
||||||
assert(actor != nullptr);
|
assert(aspr != nullptr);
|
||||||
if (actor != nullptr)
|
if (aspr != nullptr)
|
||||||
{
|
{
|
||||||
GetPositionInfo(aactor, chanSound - 1, camsect, campos, &actor->pos, nullptr, pos);
|
GetPositionInfo(aactor, chanSound - 1, camsect, campos, &aspr->pos, nullptr, pos);
|
||||||
/*
|
/*
|
||||||
if (vel) // DN3D does not properly maintain this.
|
if (vel) // DN3D does not properly maintain this.
|
||||||
{
|
{
|
||||||
|
@ -431,7 +431,7 @@ void GameInterface::UpdateSounds(void)
|
||||||
listener.Environment = nullptr;
|
listener.Environment = nullptr;
|
||||||
listener.valid = false;
|
listener.valid = false;
|
||||||
}
|
}
|
||||||
listener.ListenerObject = ud.cameraactor == nullptr ? nullptr : &ud.cameraactor->s;
|
listener.ListenerObject = ud.cameraactor == nullptr ? nullptr : ud.cameraactor->s;
|
||||||
soundEngine->SetListener(listener);
|
soundEngine->SetListener(listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -459,7 +459,7 @@ int S_PlaySound3D(int sndnum, DDukeActor* actor, const vec3_t* pos, int channel,
|
||||||
|
|
||||||
if (userflags & SF_TALK)
|
if (userflags & SF_TALK)
|
||||||
{
|
{
|
||||||
if (snd_speech == 0 || (ud.multimode > 1 && actor->s.picnum == TILE_APLAYER && actor->s.yvel != screenpeek && ud.coop != 1)) return -1;
|
if (snd_speech == 0 || (ud.multimode > 1 && actor->s->picnum == TILE_APLAYER && actor->s->yvel != screenpeek && ud.coop != 1)) return -1;
|
||||||
bool foundone = soundEngine->EnumerateChannels([&](FSoundChan* chan)
|
bool foundone = soundEngine->EnumerateChannels([&](FSoundChan* chan)
|
||||||
{
|
{
|
||||||
auto sid = chan->OrgID;
|
auto sid = chan->OrgID;
|
||||||
|
@ -497,7 +497,7 @@ int S_PlaySound3D(int sndnum, DDukeActor* actor, const vec3_t* pos, int channel,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (sndist > 32767 && actor->s.picnum != MUSICANDSFX && (userflags & (SF_LOOP | SF_MSFX)) == 0)
|
if (sndist > 32767 && actor->s->picnum != MUSICANDSFX && (userflags & (SF_LOOP | SF_MSFX)) == 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (underwater && (userflags & SF_TALK) == 0)
|
if (underwater && (userflags & SF_TALK) == 0)
|
||||||
|
@ -505,7 +505,7 @@ int S_PlaySound3D(int sndnum, DDukeActor* actor, const vec3_t* pos, int channel,
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_playing = soundEngine->GetSoundPlayingInfo(SOURCE_Any, nullptr, sndnum+1);
|
bool is_playing = soundEngine->GetSoundPlayingInfo(SOURCE_Any, nullptr, sndnum+1);
|
||||||
if (is_playing && actor->s.picnum != MUSICANDSFX)
|
if (is_playing && actor->s->picnum != MUSICANDSFX)
|
||||||
S_StopSound(sndnum, actor);
|
S_StopSound(sndnum, actor);
|
||||||
|
|
||||||
int const repeatp = (userflags & SF_LOOP);
|
int const repeatp = (userflags & SF_LOOP);
|
||||||
|
@ -564,12 +564,12 @@ int S_PlaySound(int sndnum, int channel, EChanFlags flags, float vol)
|
||||||
int S_PlayActorSound(int soundNum, DDukeActor* actor, int channel, EChanFlags flags)
|
int S_PlayActorSound(int soundNum, DDukeActor* actor, int channel, EChanFlags flags)
|
||||||
{
|
{
|
||||||
return (actor == nullptr ? S_PlaySound(soundNum, channel, flags) :
|
return (actor == nullptr ? S_PlaySound(soundNum, channel, flags) :
|
||||||
S_PlaySound3D(soundNum, actor, &actor->s.pos, channel, flags));
|
S_PlaySound3D(soundNum, actor, &actor->s->pos, channel, flags));
|
||||||
}
|
}
|
||||||
|
|
||||||
void S_RelinkActorSound(DDukeActor* from, DDukeActor* to)
|
void S_RelinkActorSound(DDukeActor* from, DDukeActor* to)
|
||||||
{
|
{
|
||||||
FVector3 pos = GetSoundPos(&from->s.pos);
|
FVector3 pos = GetSoundPos(&from->s->pos);
|
||||||
soundEngine->RelinkSound(SOURCE_Actor, sndActor(from), sndActor(to), &pos);
|
soundEngine->RelinkSound(SOURCE_Actor, sndActor(from), sndActor(to), &pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -584,7 +584,7 @@ void S_StopSound(int sndNum, DDukeActor* actor, int channel)
|
||||||
else soundEngine->StopSound(SOURCE_Actor, actor, channel, -1);
|
else soundEngine->StopSound(SOURCE_Actor, actor, channel, -1);
|
||||||
|
|
||||||
// StopSound kills the actor reference so this cannot be delayed until ChannelEnded gets called. At that point the actor may also not be valid anymore.
|
// StopSound kills the actor reference so this cannot be delayed until ChannelEnded gets called. At that point the actor may also not be valid anymore.
|
||||||
if (S_IsAmbientSFX(actor) && sector[actor->s.sectnum].lotag < 3) // ST_2_UNDERWATER
|
if (S_IsAmbientSFX(actor) && sector[actor->s->sectnum].lotag < 3) // ST_2_UNDERWATER
|
||||||
actor->temp_data[0] = 0;
|
actor->temp_data[0] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,7 +57,7 @@ DDukeActor* EGS(short whatsect, int s_x, int s_y, int s_z, short s_pn, signed ch
|
||||||
I_Error(" Too many sprites spawned.");
|
I_Error(" Too many sprites spawned.");
|
||||||
|
|
||||||
auto act = &hittype[i];
|
auto act = &hittype[i];
|
||||||
auto s = &act->s;
|
auto s = act->s;
|
||||||
|
|
||||||
s->x = s_x;
|
s->x = s_x;
|
||||||
s->y = s_y;
|
s->y = s_y;
|
||||||
|
@ -95,7 +95,7 @@ DDukeActor* EGS(short whatsect, int s_x, int s_y, int s_z, short s_pn, signed ch
|
||||||
|
|
||||||
if (s_ow)
|
if (s_ow)
|
||||||
{
|
{
|
||||||
act->picnum = s_ow->s.picnum;
|
act->picnum = s_ow->s->picnum;
|
||||||
act->floorz = s_ow->floorz;
|
act->floorz = s_ow->floorz;
|
||||||
act->ceilingz = s_ow->ceilingz;
|
act->ceilingz = s_ow->ceilingz;
|
||||||
}
|
}
|
||||||
|
@ -143,9 +143,9 @@ int initspriteforspawn(DDukeActor* actj, int pn, const std::initializer_list<int
|
||||||
|
|
||||||
if (actj)
|
if (actj)
|
||||||
{
|
{
|
||||||
auto spawned = EGS(actj->s.sectnum, actj->s.x, actj->s.y, actj->s.z, pn, 0, 0, 0, 0, 0, 0, actj, 0);
|
auto spawned = EGS(actj->s->sectnum, actj->s->x, actj->s->y, actj->s->z, pn, 0, 0, 0, 0, 0, 0, actj, 0);
|
||||||
spawned->picnum = actj->s.picnum;
|
spawned->picnum = actj->s->picnum;
|
||||||
sp = &spawned->s;
|
sp = spawned->s;
|
||||||
t = spawned->temp_data;
|
t = spawned->temp_data;
|
||||||
i = spawned->GetIndex();
|
i = spawned->GetIndex();
|
||||||
}
|
}
|
||||||
|
@ -153,7 +153,7 @@ int initspriteforspawn(DDukeActor* actj, int pn, const std::initializer_list<int
|
||||||
{
|
{
|
||||||
i = pn;
|
i = pn;
|
||||||
auto act = &hittype[i];
|
auto act = &hittype[i];
|
||||||
sp = &act->s;
|
sp = act->s;
|
||||||
t = act->temp_data;
|
t = act->temp_data;
|
||||||
|
|
||||||
act->picnum = sp->picnum;
|
act->picnum = sp->picnum;
|
||||||
|
@ -234,7 +234,7 @@ int initspriteforspawn(DDukeActor* actj, int pn, const std::initializer_list<int
|
||||||
|
|
||||||
void spawninitdefault(DDukeActor* actj, DDukeActor *act)
|
void spawninitdefault(DDukeActor* actj, DDukeActor *act)
|
||||||
{
|
{
|
||||||
auto sp = &act->s;
|
auto sp = act->s;
|
||||||
auto sect = sp->sectnum;
|
auto sect = sp->sectnum;
|
||||||
|
|
||||||
if (gs.actorinfo[sp->picnum].scriptaddress)
|
if (gs.actorinfo[sp->picnum].scriptaddress)
|
||||||
|
@ -271,8 +271,8 @@ void spawninitdefault(DDukeActor* actj, DDukeActor *act)
|
||||||
sp->clipdist = 80;
|
sp->clipdist = 80;
|
||||||
if (actj)
|
if (actj)
|
||||||
{
|
{
|
||||||
if (actj->s.picnum == RESPAWN)
|
if (actj->s->picnum == RESPAWN)
|
||||||
act->tempang = sp->pal = actj->s.pal;
|
act->tempang = sp->pal = actj->s->pal;
|
||||||
changespritestat(act, STAT_ACTOR);
|
changespritestat(act, STAT_ACTOR);
|
||||||
}
|
}
|
||||||
else changespritestat(act, STAT_ZOMBIEACTOR);
|
else changespritestat(act, STAT_ZOMBIEACTOR);
|
||||||
|
@ -287,7 +287,7 @@ void spawninitdefault(DDukeActor* actj, DDukeActor *act)
|
||||||
act->timetosleep = 0;
|
act->timetosleep = 0;
|
||||||
|
|
||||||
if (actj)
|
if (actj)
|
||||||
sp->ang = actj->s.ang;
|
sp->ang = actj->s->ang;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -300,8 +300,8 @@ void spawninitdefault(DDukeActor* actj, DDukeActor *act)
|
||||||
void spawntransporter(DDukeActor *actj, DDukeActor* acti, bool beam)
|
void spawntransporter(DDukeActor *actj, DDukeActor* acti, bool beam)
|
||||||
{
|
{
|
||||||
if (actj == nullptr) return;
|
if (actj == nullptr) return;
|
||||||
auto sp = &acti->s;
|
auto sp = acti->s;
|
||||||
auto spj = &actj->s;
|
auto spj = actj->s;
|
||||||
if (beam)
|
if (beam)
|
||||||
{
|
{
|
||||||
sp->xrepeat = 31;
|
sp->xrepeat = 31;
|
||||||
|
@ -342,7 +342,7 @@ void spawntransporter(DDukeActor *actj, DDukeActor* acti, bool beam)
|
||||||
|
|
||||||
int spawnbloodpoolpart1(DDukeActor *actj, DDukeActor* acti)
|
int spawnbloodpoolpart1(DDukeActor *actj, DDukeActor* acti)
|
||||||
{
|
{
|
||||||
auto sp = &acti->s;
|
auto sp = acti->s;
|
||||||
short s1 = sp->sectnum;
|
short s1 = sp->sectnum;
|
||||||
|
|
||||||
updatesector(sp->x + 108, sp->y + 108, &s1);
|
updatesector(sp->x + 108, sp->y + 108, &s1);
|
||||||
|
@ -382,7 +382,7 @@ int spawnbloodpoolpart1(DDukeActor *actj, DDukeActor* acti)
|
||||||
|
|
||||||
void initfootprint(DDukeActor* actj, DDukeActor* acti)
|
void initfootprint(DDukeActor* actj, DDukeActor* acti)
|
||||||
{
|
{
|
||||||
auto sp = &acti->s;
|
auto sp = acti->s;
|
||||||
int sect = sp->sectnum;
|
int sect = sp->sectnum;
|
||||||
if (actj)
|
if (actj)
|
||||||
{
|
{
|
||||||
|
@ -410,8 +410,8 @@ void initfootprint(DDukeActor* actj, DDukeActor* acti)
|
||||||
}
|
}
|
||||||
else { sp->xrepeat = sp->yrepeat = 0; return; }
|
else { sp->xrepeat = sp->yrepeat = 0; return; }
|
||||||
|
|
||||||
sp->cstat = 32 + ((ps[actj->s.yvel].footprintcount & 1) << 2);
|
sp->cstat = 32 + ((ps[actj->s->yvel].footprintcount & 1) << 2);
|
||||||
sp->ang = actj->s.ang;
|
sp->ang = actj->s->ang;
|
||||||
}
|
}
|
||||||
|
|
||||||
sp->z = sector[sect].floorz;
|
sp->z = sector[sect].floorz;
|
||||||
|
@ -430,12 +430,12 @@ void initfootprint(DDukeActor* actj, DDukeActor* acti)
|
||||||
|
|
||||||
void initshell(DDukeActor* actj, DDukeActor* acti, bool isshell)
|
void initshell(DDukeActor* actj, DDukeActor* acti, bool isshell)
|
||||||
{
|
{
|
||||||
auto sp = &acti->s;
|
auto sp = acti->s;
|
||||||
int sect = sp->sectnum;
|
int sect = sp->sectnum;
|
||||||
auto t = acti->temp_data;
|
auto t = acti->temp_data;
|
||||||
if (actj)
|
if (actj)
|
||||||
{
|
{
|
||||||
auto spj = &actj->s;
|
auto spj = actj->s;
|
||||||
short snum, a;
|
short snum, a;
|
||||||
|
|
||||||
if (spj->picnum == TILE_APLAYER)
|
if (spj->picnum == TILE_APLAYER)
|
||||||
|
@ -484,7 +484,7 @@ void initshell(DDukeActor* actj, DDukeActor* acti, bool isshell)
|
||||||
|
|
||||||
void initcrane(DDukeActor* actj, DDukeActor* acti, int CRANEPOLE)
|
void initcrane(DDukeActor* actj, DDukeActor* acti, int CRANEPOLE)
|
||||||
{
|
{
|
||||||
auto sp = &acti->s;
|
auto sp = acti->s;
|
||||||
int sect = sp->sectnum;
|
int sect = sp->sectnum;
|
||||||
auto t = acti->temp_data;
|
auto t = acti->temp_data;
|
||||||
sp->cstat |= 64 | 257;
|
sp->cstat |= 64 | 257;
|
||||||
|
@ -500,7 +500,7 @@ void initcrane(DDukeActor* actj, DDukeActor* acti, int CRANEPOLE)
|
||||||
DukeStatIterator it(STAT_DEFAULT);
|
DukeStatIterator it(STAT_DEFAULT);
|
||||||
while (auto act = it.Next())
|
while (auto act = it.Next())
|
||||||
{
|
{
|
||||||
auto ss = &act->s;
|
auto ss = act->s;
|
||||||
if (ss->picnum == CRANEPOLE && sp->hitag == (ss->hitag))
|
if (ss->picnum == CRANEPOLE && sp->hitag == (ss->hitag))
|
||||||
{
|
{
|
||||||
msy[tempwallptr + 2] = ActorToScriptIndex(act);
|
msy[tempwallptr + 2] = ActorToScriptIndex(act);
|
||||||
|
@ -537,13 +537,13 @@ void initcrane(DDukeActor* actj, DDukeActor* acti, int CRANEPOLE)
|
||||||
|
|
||||||
void initwaterdrip(DDukeActor* actj, DDukeActor* actor)
|
void initwaterdrip(DDukeActor* actj, DDukeActor* actor)
|
||||||
{
|
{
|
||||||
auto sp = &actor->s;
|
auto sp = actor->s;
|
||||||
int sect = sp->sectnum;
|
int sect = sp->sectnum;
|
||||||
auto t = actor->temp_data;
|
auto t = actor->temp_data;
|
||||||
if (actj && (actj->s.statnum == 10 || actj->s.statnum == 1))
|
if (actj && (actj->s->statnum == 10 || actj->s->statnum == 1))
|
||||||
{
|
{
|
||||||
sp->shade = 32;
|
sp->shade = 32;
|
||||||
if (actj->s.pal != 1)
|
if (actj->s->pal != 1)
|
||||||
{
|
{
|
||||||
sp->pal = 2;
|
sp->pal = 2;
|
||||||
sp->z -= (18 << 8);
|
sp->z -= (18 << 8);
|
||||||
|
@ -573,7 +573,7 @@ void initwaterdrip(DDukeActor* actj, DDukeActor* actor)
|
||||||
|
|
||||||
int initreactor(DDukeActor* actj, DDukeActor* actor, bool isrecon)
|
int initreactor(DDukeActor* actj, DDukeActor* actor, bool isrecon)
|
||||||
{
|
{
|
||||||
auto sp = &actor->s;
|
auto sp = actor->s;
|
||||||
int sect = sp->sectnum;
|
int sect = sp->sectnum;
|
||||||
auto t = actor->temp_data;
|
auto t = actor->temp_data;
|
||||||
if (isrecon)
|
if (isrecon)
|
||||||
|
@ -621,7 +621,7 @@ int initreactor(DDukeActor* actj, DDukeActor* actor, bool isrecon)
|
||||||
|
|
||||||
void spawneffector(DDukeActor* actor)
|
void spawneffector(DDukeActor* actor)
|
||||||
{
|
{
|
||||||
auto sp = &actor->s;
|
auto sp = actor->s;
|
||||||
int sect = sp->sectnum;
|
int sect = sp->sectnum;
|
||||||
auto t = actor->temp_data;
|
auto t = actor->temp_data;
|
||||||
int startwall, endwall, x, y, d, s, clostest;
|
int startwall, endwall, x, y, d, s, clostest;
|
||||||
|
@ -642,8 +642,8 @@ void spawneffector(DDukeActor* actor)
|
||||||
DukeLinearSpriteIterator it;
|
DukeLinearSpriteIterator it;
|
||||||
while (auto act2 = it.Next())
|
while (auto act2 = it.Next())
|
||||||
{
|
{
|
||||||
if (act2->s.statnum < MAXSTATUS && act2->s.picnum == SECTOREFFECTOR && (act2->s.lotag == SE_7_TELEPORT || act2->s.lotag == SE_23_ONE_WAY_TELEPORT) &&
|
if (act2->s->statnum < MAXSTATUS && act2->s->picnum == SECTOREFFECTOR && (act2->s->lotag == SE_7_TELEPORT || act2->s->lotag == SE_23_ONE_WAY_TELEPORT) &&
|
||||||
actor != act2 && act2->s.hitag == sp->hitag)
|
actor != act2 && act2->s->hitag == sp->hitag)
|
||||||
{
|
{
|
||||||
actor->SetOwner(act2);
|
actor->SetOwner(act2);
|
||||||
break;
|
break;
|
||||||
|
@ -976,7 +976,7 @@ void spawneffector(DDukeActor* actor)
|
||||||
bool found = false;
|
bool found = false;
|
||||||
while (auto act2 = it.Next())
|
while (auto act2 = it.Next())
|
||||||
{
|
{
|
||||||
auto spr = &act2->s;
|
auto spr = act2->s;
|
||||||
if (spr->statnum < MAXSTATUS)
|
if (spr->statnum < MAXSTATUS)
|
||||||
if (spr->picnum == SECTOREFFECTOR &&
|
if (spr->picnum == SECTOREFFECTOR &&
|
||||||
spr->lotag == SE_1_PIVOT &&
|
spr->lotag == SE_1_PIVOT &&
|
||||||
|
@ -1094,17 +1094,17 @@ void spawneffector(DDukeActor* actor)
|
||||||
case SE_15_SLIDING_DOOR:
|
case SE_15_SLIDING_DOOR:
|
||||||
case SE_16_REACTOR:
|
case SE_16_REACTOR:
|
||||||
case SE_26:
|
case SE_26:
|
||||||
setsectinterpolate(actor->s.sectnum);
|
setsectinterpolate(actor->s->sectnum);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SE_29_WAVES:
|
case SE_29_WAVES:
|
||||||
StartInterpolation(actor->s.sectnum, Interp_Sect_Floorheinum);
|
StartInterpolation(actor->s->sectnum, Interp_Sect_Floorheinum);
|
||||||
StartInterpolation(actor->s.sectnum, Interp_Sect_Floorz);
|
StartInterpolation(actor->s->sectnum, Interp_Sect_Floorz);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((!isRR() && actor->s.lotag >= 40 && actor->s.lotag <= 45) ||
|
if ((!isRR() && actor->s->lotag >= 40 && actor->s->lotag <= 45) ||
|
||||||
(isRRRA() && actor->s.lotag >= 150 && actor->s.lotag <= 155))
|
(isRRRA() && actor->s->lotag >= 150 && actor->s->lotag <= 155))
|
||||||
changespritestat(actor, STAT_RAROR);
|
changespritestat(actor, STAT_RAROR);
|
||||||
else
|
else
|
||||||
changespritestat(actor, STAT_EFFECTOR);
|
changespritestat(actor, STAT_EFFECTOR);
|
||||||
|
@ -1121,7 +1121,7 @@ void lotsofglass(DDukeActor *actor, int wallnum, int n)
|
||||||
{
|
{
|
||||||
int j, xv, yv, z, x1, y1, a;
|
int j, xv, yv, z, x1, y1, a;
|
||||||
short sect;
|
short sect;
|
||||||
auto sp = &actor->s;
|
auto sp = actor->s;
|
||||||
|
|
||||||
sect = -1;
|
sect = -1;
|
||||||
|
|
||||||
|
@ -1174,14 +1174,14 @@ void lotsofglass(DDukeActor *actor, int wallnum, int n)
|
||||||
|
|
||||||
void spriteglass(DDukeActor* actor, int n)
|
void spriteglass(DDukeActor* actor, int n)
|
||||||
{
|
{
|
||||||
auto sp = &actor->s;
|
auto sp = actor->s;
|
||||||
|
|
||||||
for (int j = n; j > 0; j--)
|
for (int j = n; j > 0; j--)
|
||||||
{
|
{
|
||||||
int a = krand() & 2047;
|
int a = krand() & 2047;
|
||||||
int z = sp->z - ((krand() & 16) << 8);
|
int z = sp->z - ((krand() & 16) << 8);
|
||||||
auto k = EGS(sp->sectnum, sp->x, sp->y, z, TILE_GLASSPIECES + (j % 3), krand() & 15, 36, 36, a, 32 + (krand() & 63), -512 - (krand() & 2047), actor, 5);
|
auto k = EGS(sp->sectnum, sp->x, sp->y, z, TILE_GLASSPIECES + (j % 3), krand() & 15, 36, 36, a, 32 + (krand() & 63), -512 - (krand() & 2047), actor, 5);
|
||||||
k->s.pal = sp->pal;
|
k->s->pal = sp->pal;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1195,7 +1195,7 @@ void ceilingglass(DDukeActor* actor, int sectnum, int n)
|
||||||
{
|
{
|
||||||
int j, xv, yv, z, x1, y1;
|
int j, xv, yv, z, x1, y1;
|
||||||
int a, s, startwall, endwall;
|
int a, s, startwall, endwall;
|
||||||
auto sp = &actor->s;
|
auto sp = actor->s;
|
||||||
|
|
||||||
startwall = sector[sectnum].wallptr;
|
startwall = sector[sectnum].wallptr;
|
||||||
endwall = startwall + sector[sectnum].wallnum;
|
endwall = startwall + sector[sectnum].wallnum;
|
||||||
|
@ -1230,7 +1230,7 @@ void lotsofcolourglass(DDukeActor* actor, int wallnum, int n)
|
||||||
int j, xv, yv, z, x1, y1;
|
int j, xv, yv, z, x1, y1;
|
||||||
short sect = -1;
|
short sect = -1;
|
||||||
int a;;
|
int a;;
|
||||||
auto sp = &actor->s;
|
auto sp = actor->s;
|
||||||
|
|
||||||
if (wallnum < 0)
|
if (wallnum < 0)
|
||||||
{
|
{
|
||||||
|
@ -1238,7 +1238,7 @@ void lotsofcolourglass(DDukeActor* actor, int wallnum, int n)
|
||||||
{
|
{
|
||||||
a = krand() & 2047;
|
a = krand() & 2047;
|
||||||
auto k = EGS(sp->sectnum, sp->x, sp->y, sp->z - (krand() & (63 << 8)), TILE_GLASSPIECES + (j % 3), -32, 36, 36, a, 32 + (krand() & 63), 1024 - (krand() & 2047), actor, 5);
|
auto k = EGS(sp->sectnum, sp->x, sp->y, sp->z - (krand() & (63 << 8)), TILE_GLASSPIECES + (j % 3), -32, 36, 36, a, 32 + (krand() & 63), 1024 - (krand() & 2047), actor, 5);
|
||||||
k->s.pal = krand() & 15;
|
k->s->pal = krand() & 15;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1261,7 +1261,7 @@ void lotsofcolourglass(DDukeActor* actor, int wallnum, int n)
|
||||||
z = sp->z - (32 << 8) + (krand() & ((64 << 8) - 1));
|
z = sp->z - (32 << 8) + (krand() & ((64 << 8) - 1));
|
||||||
a = sp->ang - 1024;
|
a = sp->ang - 1024;
|
||||||
auto k = EGS(sp->sectnum, x1, y1, z, TILE_GLASSPIECES + (j % 3), -32, 36, 36, a, 32 + (krand() & 63), -(krand() & 2047), actor, 5);
|
auto k = EGS(sp->sectnum, x1, y1, z, TILE_GLASSPIECES + (j % 3), -32, 36, 36, a, 32 + (krand() & 63), -(krand() & 2047), actor, 5);
|
||||||
k->s.pal = krand() & 7;
|
k->s->pal = krand() & 7;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -50,8 +50,8 @@ int spawn_d(int j, int pn)
|
||||||
if (!(i & 0x1000000)) return i;
|
if (!(i & 0x1000000)) return i;
|
||||||
i &= 0xffffff;
|
i &= 0xffffff;
|
||||||
auto act = &hittype[i];
|
auto act = &hittype[i];
|
||||||
auto sp = &act->s;
|
auto sp = act->s;
|
||||||
auto spj = j < 0 ? nullptr : &actj->s;
|
auto spj = j < 0 ? nullptr : actj->s;
|
||||||
auto t = act->temp_data;
|
auto t = act->temp_data;
|
||||||
int sect = sp->sectnum;
|
int sect = sp->sectnum;
|
||||||
|
|
||||||
|
|
|
@ -45,8 +45,8 @@ int spawn_r(int j, int pn)
|
||||||
if (!(i & 0x1000000)) return i;
|
if (!(i & 0x1000000)) return i;
|
||||||
i &= 0xffffff;
|
i &= 0xffffff;
|
||||||
auto act = &hittype[i];
|
auto act = &hittype[i];
|
||||||
auto sp = &act->s;
|
auto sp = act->s;
|
||||||
auto spj = j < 0? nullptr : &actj->s;
|
auto spj = j < 0? nullptr : actj->s;
|
||||||
auto t = act->temp_data;
|
auto t = act->temp_data;
|
||||||
int sect = sp->sectnum;
|
int sect = sp->sectnum;
|
||||||
|
|
||||||
|
|
|
@ -36,11 +36,11 @@ struct weaponhit
|
||||||
};
|
};
|
||||||
int temp_data[6];
|
int temp_data[6];
|
||||||
weaponhit* temp_actor, *seek_actor;
|
weaponhit* temp_actor, *seek_actor;
|
||||||
spritetype& s; // direct reference to the corresponding sprite.
|
spritetype* s; // direct reference to the corresponding sprite.
|
||||||
|
|
||||||
static weaponhit* array(); // this is necessary to allow define inline functions referencing the global array inside the definition itself.
|
static weaponhit* array(); // this is necessary to allow define inline functions referencing the global array inside the definition itself.
|
||||||
|
|
||||||
weaponhit() : s(sprite_s[this - array()]) {} // little trick to initialize the reference automatically. ;)
|
weaponhit() : s(&sprite_s[this - array()]) {} // little trick to initialize the reference automatically. ;)
|
||||||
weaponhit(const weaponhit& other) = delete; // we also do not want to allow copies.
|
weaponhit(const weaponhit& other) = delete; // we also do not want to allow copies.
|
||||||
weaponhit& operator=(const weaponhit& other) = delete;
|
weaponhit& operator=(const weaponhit& other) = delete;
|
||||||
void clear()
|
void clear()
|
||||||
|
@ -55,12 +55,12 @@ struct weaponhit
|
||||||
// Wrapper around some ugliness. The 'owner' field gets abused by some actors, so better wrap its real use in access functions to keep things in order.
|
// Wrapper around some ugliness. The 'owner' field gets abused by some actors, so better wrap its real use in access functions to keep things in order.
|
||||||
inline weaponhit* GetOwner()
|
inline weaponhit* GetOwner()
|
||||||
{
|
{
|
||||||
return s.owner < 0 ? nullptr : &array()[s.owner];
|
return s->owner < 0 ? nullptr : &array()[s->owner];
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void SetOwner(weaponhit* a)
|
inline void SetOwner(weaponhit* a)
|
||||||
{
|
{
|
||||||
s.owner = a? a->GetIndex() : -1;
|
s->owner = a? a->GetIndex() : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// same for the 'hittype' owner - which is normally the shooter in an attack.
|
// same for the 'hittype' owner - which is normally the shooter in an attack.
|
||||||
|
@ -77,18 +77,18 @@ struct weaponhit
|
||||||
// This used the Owner field - better move this to something more safe.
|
// This used the Owner field - better move this to something more safe.
|
||||||
inline bool IsActiveCrane()
|
inline bool IsActiveCrane()
|
||||||
{
|
{
|
||||||
return s.owner == -2;
|
return s->owner == -2;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void SetActiveCrane(bool yes)
|
inline void SetActiveCrane(bool yes)
|
||||||
{
|
{
|
||||||
s.owner = yes ? -2 : -1;
|
s->owner = yes ? -2 : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int PlayerIndex() const
|
int PlayerIndex() const
|
||||||
{
|
{
|
||||||
// only valid for real players - just here to abstract yvel.
|
// only valid for real players - just here to abstract yvel.
|
||||||
return s.yvel;
|
return s->yvel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue