mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-29 13:00:43 +00:00
- cleaned up the checkhitswitch interface to receive sprites as pointers.
This commit is contained in:
parent
3e7c8adc1e
commit
bc6ae872ae
12 changed files with 78 additions and 85 deletions
|
@ -288,12 +288,6 @@ enum amoveflags_t
|
||||||
antifaceplayerslow = 32768
|
antifaceplayerslow = 32768
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
SWITCH_WALL,
|
|
||||||
SWITCH_SPRITE
|
|
||||||
};
|
|
||||||
|
|
||||||
enum sflags_t
|
enum sflags_t
|
||||||
{
|
{
|
||||||
SFLAG_SHADOW = 0x00000001,
|
SFLAG_SHADOW = 0x00000001,
|
||||||
|
|
|
@ -43,8 +43,8 @@ void operaterespawns_d(int low);
|
||||||
void operaterespawns_r(int low);
|
void operaterespawns_r(int low);
|
||||||
void operateforcefields_r(int s, int low);
|
void operateforcefields_r(int s, int low);
|
||||||
void operateforcefields_d(int s, int low);
|
void operateforcefields_d(int s, int low);
|
||||||
bool checkhitswitch_d(int snum, int w, int switchtype);
|
bool checkhitswitch_d(int snum, int w, DDukeActor *act);
|
||||||
bool checkhitswitch_r(int snum, int w, int switchtype);
|
bool checkhitswitch_r(int snum, int w, DDukeActor* act);
|
||||||
void activatebysector_d(int sect, int j);
|
void activatebysector_d(int sect, int j);
|
||||||
void activatebysector_r(int sect, int j);
|
void activatebysector_r(int sect, int j);
|
||||||
void checkhitwall_d(DDukeActor* spr, int dawallnum, int x, int y, int z, int atwith);
|
void checkhitwall_d(DDukeActor* spr, int dawallnum, int x, int y, int z, int atwith);
|
||||||
|
|
|
@ -76,7 +76,7 @@ struct Dispatcher
|
||||||
void (*animatewalls)();
|
void (*animatewalls)();
|
||||||
void (*operaterespawns)(int low);
|
void (*operaterespawns)(int low);
|
||||||
void (*operateforcefields)(int s, int low);
|
void (*operateforcefields)(int s, int low);
|
||||||
bool (*checkhitswitch)(int snum, int w, int switchtype);
|
bool (*checkhitswitch)(int snum, int w, DDukeActor* act);
|
||||||
void (*activatebysector)(int sect, int j);
|
void (*activatebysector)(int sect, int j);
|
||||||
void (*checkhitwall)(DDukeActor* spr, int dawallnum, int x, int y, int z, int atwith);
|
void (*checkhitwall)(DDukeActor* spr, int dawallnum, int x, int y, int z, int atwith);
|
||||||
bool (*checkhitceiling)(int sn);
|
bool (*checkhitceiling)(int sn);
|
||||||
|
|
|
@ -135,7 +135,8 @@ unsigned ambientfx;
|
||||||
int msx[MAXANIMPOINTS], msy[MAXANIMPOINTS];
|
int msx[MAXANIMPOINTS], msy[MAXANIMPOINTS];
|
||||||
int WindTime, WindDir;
|
int WindTime, WindDir;
|
||||||
short fakebubba_spawn, mamaspawn_count, banjosound;
|
short fakebubba_spawn, mamaspawn_count, banjosound;
|
||||||
short BellTime, BellSprite /* word_119BE0*/;
|
short BellTime;
|
||||||
|
DDukeActor* BellSprite /* word_119BE0*/;
|
||||||
uint8_t enemysizecheat /*raat607*/, ufospawnsminion, pistonsound, chickenphase /* raat605*/, RRRA_ExitedLevel, fogactive;
|
uint8_t enemysizecheat /*raat607*/, ufospawnsminion, pistonsound, chickenphase /* raat605*/, RRRA_ExitedLevel, fogactive;
|
||||||
uint32_t everyothertime;
|
uint32_t everyothertime;
|
||||||
player_orig po[MAXPLAYERS];
|
player_orig po[MAXPLAYERS];
|
||||||
|
|
|
@ -127,7 +127,8 @@ extern unsigned ambientfx;
|
||||||
extern int msx[MAXANIMPOINTS], msy[MAXANIMPOINTS];
|
extern int msx[MAXANIMPOINTS], msy[MAXANIMPOINTS];
|
||||||
extern int WindTime, WindDir;
|
extern int WindTime, WindDir;
|
||||||
extern short fakebubba_spawn, mamaspawn_count, banjosound;
|
extern short fakebubba_spawn, mamaspawn_count, banjosound;
|
||||||
extern short BellTime, BellSprite /* word_119BE0*/;
|
extern short BellTime;
|
||||||
|
extern DDukeActor* BellSprite /* word_119BE0*/;
|
||||||
extern uint8_t enemysizecheat /*raat607*/, ufospawnsminion, pistonsound, chickenphase /* raat605*/, RRRA_ExitedLevel, fogactive;
|
extern uint8_t enemysizecheat /*raat607*/, ufospawnsminion, pistonsound, chickenphase /* raat605*/, RRRA_ExitedLevel, fogactive;
|
||||||
extern uint32_t everyothertime;
|
extern uint32_t everyothertime;
|
||||||
extern player_orig po[MAXPLAYERS];
|
extern player_orig po[MAXPLAYERS];
|
||||||
|
|
|
@ -277,7 +277,7 @@ static void shootknee(DDukeActor* actor, int p, int sx, int sy, int sz, int sa)
|
||||||
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, hitsprt->GetIndex(), 1);
|
if (p >= 0) fi.checkhitswitch(p, -1, hitsprt);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (hitwall >= 0)
|
else if (hitwall >= 0)
|
||||||
|
@ -290,7 +290,7 @@ static void shootknee(DDukeActor* actor, int p, int sx, int sy, int sz, int sa)
|
||||||
if (hitwall >= 0 && wall[hitwall].picnum != ACCESSSWITCH && wall[hitwall].picnum != ACCESSSWITCH2)
|
if (hitwall >= 0 && wall[hitwall].picnum != ACCESSSWITCH && wall[hitwall].picnum != ACCESSSWITCH2)
|
||||||
{
|
{
|
||||||
fi.checkhitwall(knee, hitwall, hitx, hity, hitz, KNEE);
|
fi.checkhitwall(knee, hitwall, hitx, hity, hitz, KNEE);
|
||||||
if (p >= 0) fi.checkhitswitch(p, hitwall, 0);
|
if (p >= 0) fi.checkhitswitch(p, hitwall, nullptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -462,7 +462,7 @@ static void shootweapon(DDukeActor *actor, int p, int sx, int sy, int sz, int sa
|
||||||
hitact->s.picnum == HANDSWITCH ||
|
hitact->s.picnum == HANDSWITCH ||
|
||||||
hitact->s.picnum == HANDSWITCH + 1))
|
hitact->s.picnum == HANDSWITCH + 1))
|
||||||
{
|
{
|
||||||
fi.checkhitswitch(p, hitact->GetIndex(), 1);
|
fi.checkhitswitch(p, -1, hitact);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -482,7 +482,7 @@ static void shootweapon(DDukeActor *actor, int p, int sx, int sy, int sz, int sa
|
||||||
wall[hitwall].picnum == HANDSWITCH ||
|
wall[hitwall].picnum == HANDSWITCH ||
|
||||||
wall[hitwall].picnum == HANDSWITCH + 1))
|
wall[hitwall].picnum == HANDSWITCH + 1))
|
||||||
{
|
{
|
||||||
fi.checkhitswitch(p, hitwall, 0);
|
fi.checkhitswitch(p, hitwall, nullptr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1517,7 +1517,7 @@ int doincrements_d(struct player_struct* p)
|
||||||
{
|
{
|
||||||
if (p->access_spritenum != nullptr)
|
if (p->access_spritenum != nullptr)
|
||||||
{
|
{
|
||||||
fi.checkhitswitch(snum, p->access_spritenum->GetIndex(), 1);
|
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;
|
||||||
|
@ -1528,7 +1528,7 @@ int doincrements_d(struct player_struct* p)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fi.checkhitswitch(snum, p->access_wallnum, 0);
|
fi.checkhitswitch(snum, p->access_wallnum, nullptr);
|
||||||
switch (wall[p->access_wallnum].pal)
|
switch (wall[p->access_wallnum].pal)
|
||||||
{
|
{
|
||||||
case 0:p->got_access &= (0xffff - 0x1); break;
|
case 0:p->got_access &= (0xffff - 0x1); break;
|
||||||
|
|
|
@ -175,7 +175,7 @@ static void shootmelee(DDukeActor *actor, int p, int sx, int sy, int sz, int sa,
|
||||||
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, hitsprt->GetIndex(), 1);
|
if (p >= 0) fi.checkhitswitch(p, -1, hitsprt);
|
||||||
}
|
}
|
||||||
else if (hitwall >= 0)
|
else if (hitwall >= 0)
|
||||||
{
|
{
|
||||||
|
@ -187,7 +187,7 @@ static void shootmelee(DDukeActor *actor, int p, int sx, int sy, int sz, int sa,
|
||||||
if (hitwall >= 0 && wall[hitwall].picnum != ACCESSSWITCH && wall[hitwall].picnum != ACCESSSWITCH2)
|
if (hitwall >= 0 && wall[hitwall].picnum != ACCESSSWITCH && wall[hitwall].picnum != ACCESSSWITCH2)
|
||||||
{
|
{
|
||||||
fi.checkhitwall(wpn, hitwall, hitx, hity, hitz, atwith);
|
fi.checkhitwall(wpn, hitwall, hitx, hity, hitz, atwith);
|
||||||
if (p >= 0) fi.checkhitswitch(p, hitwall, 0);
|
if (p >= 0) fi.checkhitswitch(p, hitwall, nullptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -364,7 +364,7 @@ static void shootweapon(DDukeActor* actor, int p, int sx, int sy, int sz, int sa
|
||||||
hitsprt->s.picnum == HANDSWITCH ||
|
hitsprt->s.picnum == HANDSWITCH ||
|
||||||
hitsprt->s.picnum == HANDSWITCH + 1))
|
hitsprt->s.picnum == HANDSWITCH + 1))
|
||||||
{
|
{
|
||||||
fi.checkhitswitch(p, hitsprt->GetIndex(), 1);
|
fi.checkhitswitch(p, -1, hitsprt);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -387,7 +387,7 @@ static void shootweapon(DDukeActor* actor, int p, int sx, int sy, int sz, int sa
|
||||||
wall[hitwall].picnum == HANDSWITCH ||
|
wall[hitwall].picnum == HANDSWITCH ||
|
||||||
wall[hitwall].picnum == HANDSWITCH + 1))
|
wall[hitwall].picnum == HANDSWITCH + 1))
|
||||||
{
|
{
|
||||||
fi.checkhitswitch(p, hitwall, 0);
|
fi.checkhitswitch(p, hitwall, nullptr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1220,8 +1220,8 @@ int doincrements_r(struct player_struct* p)
|
||||||
if (BellTime > 0)
|
if (BellTime > 0)
|
||||||
{
|
{
|
||||||
BellTime--;
|
BellTime--;
|
||||||
if (BellTime == 0)
|
if (BellTime == 0 && BellSprite)
|
||||||
sprite[BellSprite].picnum++;
|
BellSprite->s.picnum++;
|
||||||
}
|
}
|
||||||
if (chickenphase > 0)
|
if (chickenphase > 0)
|
||||||
chickenphase--;
|
chickenphase--;
|
||||||
|
@ -1369,7 +1369,7 @@ int doincrements_r(struct player_struct* p)
|
||||||
{
|
{
|
||||||
if (p->access_spritenum != nullptr)
|
if (p->access_spritenum != nullptr)
|
||||||
{
|
{
|
||||||
fi.checkhitswitch(snum, p->access_spritenum->GetIndex(), 1);
|
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;
|
||||||
|
@ -1380,7 +1380,7 @@ int doincrements_r(struct player_struct* p)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fi.checkhitswitch(snum, p->access_wallnum, 0);
|
fi.checkhitswitch(snum, p->access_wallnum, nullptr);
|
||||||
switch (wall[p->access_wallnum].pal)
|
switch (wall[p->access_wallnum].pal)
|
||||||
{
|
{
|
||||||
case 0:p->keys[1] = 1; break;
|
case 0:p->keys[1] = 1; break;
|
||||||
|
|
|
@ -426,7 +426,7 @@ void resetprestat(int snum,int g)
|
||||||
fakebubba_spawn = 0;
|
fakebubba_spawn = 0;
|
||||||
RRRA_ExitedLevel = 0;
|
RRRA_ExitedLevel = 0;
|
||||||
BellTime = 0;
|
BellTime = 0;
|
||||||
BellSprite = 0;
|
BellSprite = nullptr;
|
||||||
|
|
||||||
numinterpolations = 0;
|
numinterpolations = 0;
|
||||||
//startofdynamicinterpolations = 0;
|
//startofdynamicinterpolations = 0;
|
||||||
|
@ -677,7 +677,7 @@ void prelevel_common(int g)
|
||||||
RRRA_ExitedLevel = 0;
|
RRRA_ExitedLevel = 0;
|
||||||
mamaspawn_count = 15;
|
mamaspawn_count = 15;
|
||||||
BellTime = 0;
|
BellTime = 0;
|
||||||
BellSprite = 0;
|
BellSprite = nullptr;
|
||||||
|
|
||||||
// RRRA E2L1 fog handling.
|
// RRRA E2L1 fog handling.
|
||||||
fogactive = 0;
|
fogactive = 0;
|
||||||
|
|
|
@ -223,20 +223,18 @@ void operateforcefields_d(int s, int low)
|
||||||
//
|
//
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
bool checkhitswitch_d(int snum, int w, int switchtype)
|
bool checkhitswitch_d(int snum, int ww, DDukeActor *act)
|
||||||
{
|
{
|
||||||
uint8_t switchpal;
|
uint8_t switchpal;
|
||||||
int i, x, lotag, hitag, picnum, correctdips, numdips;
|
int i, x, lotag, hitag, picnum, correctdips, numdips;
|
||||||
int sx, sy;
|
int sx, sy;
|
||||||
|
|
||||||
if (w < 0) return 0;
|
if (ww < 0 && act == nullptr) return 0;
|
||||||
correctdips = 1;
|
correctdips = 1;
|
||||||
numdips = 0;
|
numdips = 0;
|
||||||
DDukeActor* act = nullptr;
|
|
||||||
|
if (act)
|
||||||
if (switchtype == SWITCH_SPRITE) // A wall sprite
|
|
||||||
{
|
{
|
||||||
act = &hittype[w];
|
|
||||||
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;
|
||||||
|
@ -247,7 +245,7 @@ bool checkhitswitch_d(int snum, int w, int switchtype)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
auto wal = &wall[w];
|
auto wal = &wall[ww];
|
||||||
lotag = wal->lotag;
|
lotag = wal->lotag;
|
||||||
if (lotag == 0) return 0;
|
if (lotag == 0) return 0;
|
||||||
hitag = wal->hitag;
|
hitag = wal->hitag;
|
||||||
|
@ -267,7 +265,7 @@ bool checkhitswitch_d(int snum, int w, int switchtype)
|
||||||
case ALIENSWITCH + 1:
|
case ALIENSWITCH + 1:
|
||||||
break;
|
break;
|
||||||
case DEVELOPERCOMMENTARY + 1: //Twentieth Anniversary World Tour
|
case DEVELOPERCOMMENTARY + 1: //Twentieth Anniversary World Tour
|
||||||
if (switchtype == 1)
|
if (act)
|
||||||
{
|
{
|
||||||
StopCommentary();
|
StopCommentary();
|
||||||
act->s.picnum = DEVELOPERCOMMENTARY;
|
act->s.picnum = DEVELOPERCOMMENTARY;
|
||||||
|
@ -275,9 +273,9 @@ bool checkhitswitch_d(int snum, int w, int switchtype)
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
case DEVELOPERCOMMENTARY: //Twentieth Anniversary World Tour
|
case DEVELOPERCOMMENTARY: //Twentieth Anniversary World Tour
|
||||||
if (switchtype == 1)
|
if (act)
|
||||||
{
|
{
|
||||||
if (StartCommentary(lotag, w))
|
if (StartCommentary(lotag, act))
|
||||||
act->s.picnum = DEVELOPERCOMMENTARY+1;
|
act->s.picnum = DEVELOPERCOMMENTARY+1;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -309,8 +307,8 @@ bool checkhitswitch_d(int snum, int w, int switchtype)
|
||||||
|
|
||||||
if (ps[snum].access_incs == 1)
|
if (ps[snum].access_incs == 1)
|
||||||
{
|
{
|
||||||
if (switchtype == SWITCH_WALL)
|
if (!act)
|
||||||
ps[snum].access_wallnum = w;
|
ps[snum].access_wallnum = ww;
|
||||||
else
|
else
|
||||||
ps[snum].access_spritenum = act;
|
ps[snum].access_spritenum = act;
|
||||||
}
|
}
|
||||||
|
@ -363,14 +361,14 @@ bool checkhitswitch_d(int snum, int w, int switchtype)
|
||||||
case DIPSWITCH:
|
case DIPSWITCH:
|
||||||
case TECHSWITCH:
|
case TECHSWITCH:
|
||||||
case ALIENSWITCH:
|
case ALIENSWITCH:
|
||||||
if (switchtype == SWITCH_SPRITE && act == other) si->picnum++;
|
if (act && act == other) si->picnum++;
|
||||||
else if (si->hitag == 0) correctdips++;
|
else if (si->hitag == 0) correctdips++;
|
||||||
numdips++;
|
numdips++;
|
||||||
break;
|
break;
|
||||||
case TECHSWITCH + 1:
|
case TECHSWITCH + 1:
|
||||||
case DIPSWITCH + 1:
|
case DIPSWITCH + 1:
|
||||||
case ALIENSWITCH + 1:
|
case ALIENSWITCH + 1:
|
||||||
if (switchtype == SWITCH_SPRITE && act == other) si->picnum--;
|
if (act && act == other) si->picnum--;
|
||||||
else if (si->hitag == 1) correctdips++;
|
else if (si->hitag == 1) correctdips++;
|
||||||
numdips++;
|
numdips++;
|
||||||
break;
|
break;
|
||||||
|
@ -426,14 +424,14 @@ bool checkhitswitch_d(int snum, int w, int switchtype)
|
||||||
case DIPSWITCH:
|
case DIPSWITCH:
|
||||||
case TECHSWITCH:
|
case TECHSWITCH:
|
||||||
case ALIENSWITCH:
|
case ALIENSWITCH:
|
||||||
if (switchtype == SWITCH_WALL && i == w) wall[x].picnum++;
|
if (!act && i == ww) wall[x].picnum++;
|
||||||
else if (wall[x].hitag == 0) correctdips++;
|
else if (wall[x].hitag == 0) correctdips++;
|
||||||
numdips++;
|
numdips++;
|
||||||
break;
|
break;
|
||||||
case DIPSWITCH + 1:
|
case DIPSWITCH + 1:
|
||||||
case TECHSWITCH + 1:
|
case TECHSWITCH + 1:
|
||||||
case ALIENSWITCH + 1:
|
case ALIENSWITCH + 1:
|
||||||
if (switchtype == SWITCH_WALL && i == w) wall[x].picnum--;
|
if (!act && i == ww) wall[x].picnum--;
|
||||||
else if (wall[x].hitag == 1) correctdips++;
|
else if (wall[x].hitag == 1) correctdips++;
|
||||||
numdips++;
|
numdips++;
|
||||||
break;
|
break;
|
||||||
|
@ -501,13 +499,13 @@ bool checkhitswitch_d(int snum, int w, int switchtype)
|
||||||
{
|
{
|
||||||
if (picnum == ALIENSWITCH || picnum == ALIENSWITCH + 1)
|
if (picnum == ALIENSWITCH || picnum == ALIENSWITCH + 1)
|
||||||
{
|
{
|
||||||
if (switchtype == SWITCH_SPRITE)
|
if (act)
|
||||||
S_PlaySound3D(ALIEN_SWITCH1, act, &v);
|
S_PlaySound3D(ALIEN_SWITCH1, act, &v);
|
||||||
else S_PlaySound3D(ALIEN_SWITCH1, ps[snum].GetActor(), &v);
|
else S_PlaySound3D(ALIEN_SWITCH1, ps[snum].GetActor(), &v);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (switchtype == SWITCH_SPRITE)
|
if (act)
|
||||||
S_PlaySound3D(SWITCH_ON, act, &v);
|
S_PlaySound3D(SWITCH_ON, act, &v);
|
||||||
else S_PlaySound3D(SWITCH_ON, ps[snum].GetActor(), &v);
|
else S_PlaySound3D(SWITCH_ON, ps[snum].GetActor(), &v);
|
||||||
}
|
}
|
||||||
|
@ -590,7 +588,7 @@ bool checkhitswitch_d(int snum, int w, int switchtype)
|
||||||
|
|
||||||
if (hitag == 0 && fi.isadoorwall(picnum) == 0)
|
if (hitag == 0 && fi.isadoorwall(picnum) == 0)
|
||||||
{
|
{
|
||||||
if (switchtype == SWITCH_SPRITE)
|
if (act)
|
||||||
S_PlaySound3D(SWITCH_ON, act, &v);
|
S_PlaySound3D(SWITCH_ON, act, &v);
|
||||||
else S_PlaySound3D(SWITCH_ON, ps[snum].GetActor(), &v);
|
else S_PlaySound3D(SWITCH_ON, ps[snum].GetActor(), &v);
|
||||||
}
|
}
|
||||||
|
@ -598,7 +596,7 @@ bool checkhitswitch_d(int snum, int w, int switchtype)
|
||||||
{
|
{
|
||||||
auto flags = S_GetUserFlags(hitag);
|
auto flags = S_GetUserFlags(hitag);
|
||||||
|
|
||||||
if (switchtype == SWITCH_SPRITE && (flags & SF_TALK) == 0)
|
if (act && (flags & SF_TALK) == 0)
|
||||||
S_PlaySound3D(hitag, act, &v);
|
S_PlaySound3D(hitag, act, &v);
|
||||||
else
|
else
|
||||||
S_PlayActorSound(hitag, ps[snum].i);
|
S_PlayActorSound(hitag, ps[snum].i);
|
||||||
|
@ -1641,7 +1639,7 @@ void checksectors_d(int snum)
|
||||||
|
|
||||||
if (neartagsprite >= 0)
|
if (neartagsprite >= 0)
|
||||||
{
|
{
|
||||||
if (fi.checkhitswitch(snum, neartagsprite, 1)) return;
|
if (fi.checkhitswitch(snum, -1, &hittype[neartagsprite])) return;
|
||||||
|
|
||||||
switch (sprite[neartagsprite].picnum)
|
switch (sprite[neartagsprite].picnum)
|
||||||
{
|
{
|
||||||
|
@ -1772,7 +1770,7 @@ void checksectors_d(int snum)
|
||||||
if (wall[neartagwall].lotag > 0 && fi.isadoorwall(wall[neartagwall].picnum))
|
if (wall[neartagwall].lotag > 0 && fi.isadoorwall(wall[neartagwall].picnum))
|
||||||
{
|
{
|
||||||
if (hitscanwall == neartagwall || hitscanwall == -1)
|
if (hitscanwall == neartagwall || hitscanwall == -1)
|
||||||
fi.checkhitswitch(snum, neartagwall, 0);
|
fi.checkhitswitch(snum, neartagwall, nullptr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (p->newowner >= 0)
|
else if (p->newowner >= 0)
|
||||||
|
@ -1803,7 +1801,7 @@ void checksectors_d(int snum)
|
||||||
}
|
}
|
||||||
operatesectors(p->GetActor()->s.sectnum, p->GetActor());
|
operatesectors(p->GetActor()->s.sectnum, p->GetActor());
|
||||||
}
|
}
|
||||||
else fi.checkhitswitch(snum, neartagwall, 0);
|
else fi.checkhitswitch(snum, neartagwall, nullptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -343,20 +343,18 @@ void operateforcefields_r(int s, int low)
|
||||||
//
|
//
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
bool checkhitswitch_r(int snum, int w, int switchtype)
|
bool checkhitswitch_r(int snum, int ww, DDukeActor* act)
|
||||||
{
|
{
|
||||||
uint8_t switchpal;
|
uint8_t switchpal;
|
||||||
int i, x, lotag, hitag, picnum, correctdips, numdips;
|
int i, x, lotag, hitag, picnum, correctdips, numdips;
|
||||||
int sx, sy;
|
int sx, sy;
|
||||||
|
|
||||||
if (w < 0) return 0;
|
if (ww < 0 && act == nullptr) return 0;
|
||||||
correctdips = 1;
|
correctdips = 1;
|
||||||
numdips = 0;
|
numdips = 0;
|
||||||
DDukeActor* act = nullptr;
|
|
||||||
|
|
||||||
if (switchtype == SWITCH_SPRITE) // A wall sprite
|
if (act)
|
||||||
{
|
{
|
||||||
act = &hittype[w];
|
|
||||||
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;
|
||||||
|
@ -367,7 +365,7 @@ bool checkhitswitch_r(int snum, int w, int switchtype)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
auto wal = &wall[w];
|
auto wal = &wall[ww];
|
||||||
lotag = wal->lotag;
|
lotag = wal->lotag;
|
||||||
if (lotag == 0) return 0;
|
if (lotag == 0) return 0;
|
||||||
hitag = wal->hitag;
|
hitag = wal->hitag;
|
||||||
|
@ -397,7 +395,7 @@ bool checkhitswitch_r(int snum, int w, int switchtype)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FTA(70, &ps[snum]);
|
FTA(70, &ps[snum]);
|
||||||
if (isRRRA()) S_PlayActorSound(99, w);
|
if (isRRRA()) S_PlayActorSound(99, act? act : ps[snum].GetActor());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -408,7 +406,7 @@ bool checkhitswitch_r(int snum, int w, int switchtype)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FTA(71, &ps[snum]);
|
FTA(71, &ps[snum]);
|
||||||
if (isRRRA()) S_PlayActorSound(99, w);
|
if (isRRRA()) S_PlayActorSound(99, act ? act : ps[snum].GetActor());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -419,14 +417,14 @@ bool checkhitswitch_r(int snum, int w, int switchtype)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FTA(72, &ps[snum]);
|
FTA(72, &ps[snum]);
|
||||||
if (isRRRA()) S_PlayActorSound(99, w);
|
if (isRRRA()) S_PlayActorSound(99, act ? act : ps[snum].GetActor());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ps[snum].access_incs == 1)
|
if (ps[snum].access_incs == 1)
|
||||||
{
|
{
|
||||||
if (switchtype == 0)
|
if (!act)
|
||||||
ps[snum].access_wallnum = w;
|
ps[snum].access_wallnum = ww;
|
||||||
else
|
else
|
||||||
ps[snum].access_spritenum = act;
|
ps[snum].access_spritenum = act;
|
||||||
}
|
}
|
||||||
|
@ -496,14 +494,14 @@ bool checkhitswitch_r(int snum, int w, int switchtype)
|
||||||
case DIPSWITCH:
|
case DIPSWITCH:
|
||||||
case TECHSWITCH:
|
case TECHSWITCH:
|
||||||
case ALIENSWITCH:
|
case ALIENSWITCH:
|
||||||
if (switchtype == SWITCH_SPRITE && act == other) si->picnum++;
|
if (act && act == other) si->picnum++;
|
||||||
else if (si->hitag == 0) correctdips++;
|
else if (si->hitag == 0) correctdips++;
|
||||||
numdips++;
|
numdips++;
|
||||||
break;
|
break;
|
||||||
case TECHSWITCH + 1:
|
case TECHSWITCH + 1:
|
||||||
case DIPSWITCH + 1:
|
case DIPSWITCH + 1:
|
||||||
case ALIENSWITCH + 1:
|
case ALIENSWITCH + 1:
|
||||||
if (switchtype == SWITCH_SPRITE && act == other) si->picnum--;
|
if (act && act == other) si->picnum--;
|
||||||
else if (si->hitag == 1) correctdips++;
|
else if (si->hitag == 1) correctdips++;
|
||||||
numdips++;
|
numdips++;
|
||||||
break;
|
break;
|
||||||
|
@ -610,14 +608,14 @@ bool checkhitswitch_r(int snum, int w, int switchtype)
|
||||||
case DIPSWITCH:
|
case DIPSWITCH:
|
||||||
case TECHSWITCH:
|
case TECHSWITCH:
|
||||||
case ALIENSWITCH:
|
case ALIENSWITCH:
|
||||||
if (switchtype == SWITCH_WALL && i == w) wall[x].picnum++;
|
if (!act && i == ww) wall[x].picnum++;
|
||||||
else if (wall[x].hitag == 0) correctdips++;
|
else if (wall[x].hitag == 0) correctdips++;
|
||||||
numdips++;
|
numdips++;
|
||||||
break;
|
break;
|
||||||
case DIPSWITCH + 1:
|
case DIPSWITCH + 1:
|
||||||
case TECHSWITCH + 1:
|
case TECHSWITCH + 1:
|
||||||
case ALIENSWITCH + 1:
|
case ALIENSWITCH + 1:
|
||||||
if (switchtype == SWITCH_WALL && i == w) wall[x].picnum--;
|
if (!act && i == ww) wall[x].picnum--;
|
||||||
else if (wall[x].hitag == 1) correctdips++;
|
else if (wall[x].hitag == 1) correctdips++;
|
||||||
numdips++;
|
numdips++;
|
||||||
break;
|
break;
|
||||||
|
@ -699,13 +697,13 @@ bool checkhitswitch_r(int snum, int w, int switchtype)
|
||||||
{
|
{
|
||||||
if (picnum == ALIENSWITCH || picnum == ALIENSWITCH + 1)
|
if (picnum == ALIENSWITCH || picnum == ALIENSWITCH + 1)
|
||||||
{
|
{
|
||||||
if (switchtype == SWITCH_SPRITE)
|
if (act)
|
||||||
S_PlaySound3D(ALIEN_SWITCH1, act, &v);
|
S_PlaySound3D(ALIEN_SWITCH1, act, &v);
|
||||||
else S_PlaySound3D(ALIEN_SWITCH1, ps[snum].GetActor(), &v);
|
else S_PlaySound3D(ALIEN_SWITCH1, ps[snum].GetActor(), &v);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (switchtype == SWITCH_SPRITE)
|
if (act)
|
||||||
S_PlaySound3D(SWITCH_ON, act, &v);
|
S_PlaySound3D(SWITCH_ON, act, &v);
|
||||||
else S_PlaySound3D(SWITCH_ON, ps[snum].GetActor(), &v);
|
else S_PlaySound3D(SWITCH_ON, ps[snum].GetActor(), &v);
|
||||||
}
|
}
|
||||||
|
@ -759,10 +757,10 @@ bool checkhitswitch_r(int snum, int w, int switchtype)
|
||||||
goOn2:
|
goOn2:
|
||||||
if (isRRRA())
|
if (isRRRA())
|
||||||
{
|
{
|
||||||
if (picnum == RRTILE8660)
|
if (picnum == RRTILE8660 && act)
|
||||||
{
|
{
|
||||||
BellTime = 132;
|
BellTime = 132;
|
||||||
BellSprite = w;
|
BellSprite = act;
|
||||||
act->s.picnum++;
|
act->s.picnum++;
|
||||||
}
|
}
|
||||||
else if (picnum == RRTILE8464)
|
else if (picnum == RRTILE8464)
|
||||||
|
@ -785,7 +783,8 @@ bool checkhitswitch_r(int snum, int w, int switchtype)
|
||||||
picnum == MULTISWITCH2 || picnum == (MULTISWITCH2 + 1) ||
|
picnum == MULTISWITCH2 || picnum == (MULTISWITCH2 + 1) ||
|
||||||
picnum == (MULTISWITCH2 + 2) || picnum == (MULTISWITCH2 + 3))
|
picnum == (MULTISWITCH2 + 2) || picnum == (MULTISWITCH2 + 3))
|
||||||
{
|
{
|
||||||
int switches[3], switchcount = 0, j;
|
DDukeActor* switches[3];
|
||||||
|
int switchcount = 0, j;
|
||||||
S_PlaySound3D(SWITCH_ON, act, &v);
|
S_PlaySound3D(SWITCH_ON, act, &v);
|
||||||
DukeSpriteIterator it;
|
DukeSpriteIterator it;
|
||||||
while (auto actt = it.Next())
|
while (auto actt = it.Next())
|
||||||
|
@ -796,7 +795,7 @@ bool checkhitswitch_r(int snum, int w, int switchtype)
|
||||||
{
|
{
|
||||||
if (switchcount < 3)
|
if (switchcount < 3)
|
||||||
{
|
{
|
||||||
switches[switchcount] = actt->GetIndex();
|
switches[switchcount] = actt;
|
||||||
switchcount++;
|
switchcount++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -806,12 +805,12 @@ bool checkhitswitch_r(int snum, int w, int switchtype)
|
||||||
S_PlaySound3D(78, act, &v);
|
S_PlaySound3D(78, act, &v);
|
||||||
for (j = 0; j < switchcount; j++)
|
for (j = 0; j < switchcount; j++)
|
||||||
{
|
{
|
||||||
sprite[switches[j]].hitag = 0;
|
switches[j]->s.hitag = 0;
|
||||||
if (picnum >= MULTISWITCH2)
|
if (picnum >= MULTISWITCH2)
|
||||||
sprite[switches[j]].picnum = MULTISWITCH2 + 3;
|
switches[j]->s.picnum = MULTISWITCH2 + 3;
|
||||||
else
|
else
|
||||||
sprite[switches[j]].picnum = MULTISWITCH + 3;
|
switches[j]->s.picnum = MULTISWITCH + 3;
|
||||||
checkhitswitch_r(snum, switches[j], 1);
|
checkhitswitch_r(snum, -1, switches[j]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -871,7 +870,7 @@ bool checkhitswitch_r(int snum, int w, int switchtype)
|
||||||
|
|
||||||
if (hitag == 0 && fi.isadoorwall(picnum) == 0)
|
if (hitag == 0 && fi.isadoorwall(picnum) == 0)
|
||||||
{
|
{
|
||||||
if (switchtype == SWITCH_SPRITE)
|
if (act)
|
||||||
S_PlaySound3D(SWITCH_ON, act, &v);
|
S_PlaySound3D(SWITCH_ON, act, &v);
|
||||||
else S_PlaySound3D(SWITCH_ON, ps[snum].GetActor(), &v);
|
else S_PlaySound3D(SWITCH_ON, ps[snum].GetActor(), &v);
|
||||||
}
|
}
|
||||||
|
@ -879,7 +878,7 @@ bool checkhitswitch_r(int snum, int w, int switchtype)
|
||||||
{
|
{
|
||||||
auto flags = S_GetUserFlags(hitag);
|
auto flags = S_GetUserFlags(hitag);
|
||||||
|
|
||||||
if (switchtype == SWITCH_SPRITE && (flags & SF_TALK) == 0)
|
if (act && (flags & SF_TALK) == 0)
|
||||||
S_PlaySound3D(hitag, act, &v);
|
S_PlaySound3D(hitag, act, &v);
|
||||||
else
|
else
|
||||||
S_PlayActorSound(hitag, ps[snum].GetActor());
|
S_PlayActorSound(hitag, ps[snum].GetActor());
|
||||||
|
@ -2604,7 +2603,7 @@ void checksectors_r(int snum)
|
||||||
|
|
||||||
if (neartagsprite >= 0)
|
if (neartagsprite >= 0)
|
||||||
{
|
{
|
||||||
if (fi.checkhitswitch(snum, neartagsprite, 1)) return;
|
if (fi.checkhitswitch(snum, -1, &hittype[neartagsprite])) return;
|
||||||
|
|
||||||
switch (sprite[neartagsprite].picnum)
|
switch (sprite[neartagsprite].picnum)
|
||||||
{
|
{
|
||||||
|
@ -2721,7 +2720,7 @@ void checksectors_r(int snum)
|
||||||
if (wall[neartagwall].lotag > 0 && fi.isadoorwall(wall[neartagwall].picnum))
|
if (wall[neartagwall].lotag > 0 && fi.isadoorwall(wall[neartagwall].picnum))
|
||||||
{
|
{
|
||||||
if (hitscanwall == neartagwall || hitscanwall == -1)
|
if (hitscanwall == neartagwall || hitscanwall == -1)
|
||||||
fi.checkhitswitch(snum, neartagwall, 0);
|
fi.checkhitswitch(snum, neartagwall, nullptr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2766,7 +2765,7 @@ void checksectors_r(int snum)
|
||||||
FTA(41, p);
|
FTA(41, p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else fi.checkhitswitch(snum, neartagwall, 0);
|
else fi.checkhitswitch(snum, neartagwall, nullptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,7 +54,7 @@ BEGIN_DUKE_NS
|
||||||
|
|
||||||
TArray<FString> specialmusic;
|
TArray<FString> specialmusic;
|
||||||
static FSoundID currentCommentarySound;
|
static FSoundID currentCommentarySound;
|
||||||
static int currentCommentarySprite;
|
static DDukeActor* currentCommentarySprite; // todo: GC this once actors become objects
|
||||||
|
|
||||||
|
|
||||||
class DukeSoundEngine : public SoundEngine
|
class DukeSoundEngine : public SoundEngine
|
||||||
|
@ -90,7 +90,7 @@ public:
|
||||||
{
|
{
|
||||||
UnloadSound(schan->SoundID);
|
UnloadSound(schan->SoundID);
|
||||||
currentCommentarySound = 0;
|
currentCommentarySound = 0;
|
||||||
sprite[currentCommentarySprite].picnum = DEVELOPERCOMMENTARY;
|
currentCommentarySprite->s.picnum = DEVELOPERCOMMENTARY;
|
||||||
I_SetRelativeVolume(1.0f);
|
I_SetRelativeVolume(1.0f);
|
||||||
}
|
}
|
||||||
SoundEngine::SoundDone(schan);
|
SoundEngine::SoundDone(schan);
|
||||||
|
@ -815,7 +815,7 @@ void StopCommentary()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool StartCommentary(int tag, int sprnum)
|
bool StartCommentary(int tag, DDukeActor* actor)
|
||||||
{
|
{
|
||||||
if (wt_commentary && Commentaries.Size() > tag && Commentaries[tag].IsNotEmpty())
|
if (wt_commentary && Commentaries.Size() > tag && Commentaries[tag].IsNotEmpty())
|
||||||
{
|
{
|
||||||
|
@ -833,7 +833,7 @@ bool StartCommentary(int tag, int sprnum)
|
||||||
StopCommentary();
|
StopCommentary();
|
||||||
soundEngine->StartSound(SOURCE_None, nullptr, nullptr, CHAN_VOICE, CHANF_UI | CHANF_TRANSIENT | CHANF_OVERLAP, id, 1.f, 0.f);
|
soundEngine->StartSound(SOURCE_None, nullptr, nullptr, CHAN_VOICE, CHANF_UI | CHANF_TRANSIENT | CHANF_OVERLAP, id, 1.f, 0.f);
|
||||||
currentCommentarySound = id;
|
currentCommentarySound = id;
|
||||||
currentCommentarySprite = sprnum;
|
currentCommentarySprite = actor;
|
||||||
I_SetRelativeVolume(0.25f);
|
I_SetRelativeVolume(0.25f);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,7 +72,7 @@ void S_ContinueLevelMusic(void);
|
||||||
void S_ParseDeveloperCommentary();
|
void S_ParseDeveloperCommentary();
|
||||||
|
|
||||||
void StopCommentary();
|
void StopCommentary();
|
||||||
bool StartCommentary(int tag, int sprnum);
|
bool StartCommentary(int tag, DDukeActor* sprnum);
|
||||||
|
|
||||||
extern TArray<FString> specialmusic;
|
extern TArray<FString> specialmusic;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue