diff --git a/source/games/whaven/src/main.cpp b/source/games/whaven/src/main.cpp index 0945f0a52..366a037b8 100644 --- a/source/games/whaven/src/main.cpp +++ b/source/games/whaven/src/main.cpp @@ -5,8 +5,12 @@ #include "buildtiles.h" #include "v_draw.h" #include "menu.h" +#include "mmulti.h" -BEGIN_WH_NS +BEGIN_WH_NS + +int followmode, followx, followy, followa; +int followang, followvel, followsvel; const char *GameInterface::CheckCheatMode() { @@ -275,9 +279,75 @@ void GameInterface::DrawBackground() } } +inline bool playrunning() +{ + return (paused == 0 || multiplayer/* || demoplay/record*/); +} + +void GameInterface::Ticker() +{ +#if 0 + // Make copies so that the originals do not have to be modified. + for (int i = 0; i < MAXPLAYERS; i++) + { + auto oldactions = ps[i].sync.actions; + ps[i].sync = playercmds[i].ucmd; + if (oldactions & SB_CENTERVIEW) ps[i].sync.actions |= SB_CENTERVIEW; + } +#endif + + if (!playrunning()) + { + r_NoInterpolate = true; + return; + } + + for (int i = connecthead; i >= 0; i = connectpoint2[i]) + player[i].oldsector = player[i].sector; + + PLAYER &plr = player[pyrn]; + viewBackupPlayerLoc(pyrn); + + //processinput(pyrn); + updateviewmap(plr); + //updatepaletteshifts(); + + processobjs(plr); + animateobjs(plr); + animatetags(pyrn); + doanimations(); + dodelayitems(TICSPERFRAME); + dofx(); + speelbookprocess(plr); + timerprocess(plr); + weaponsprocess(pyrn); + + updatesounds(); + + if (followmode) { + followa += followang; + + followx += (followvel * sintable[(512 + 2048 - followa) & 2047]) >> 10; + followy += (followvel * sintable[(512 + 1024 - 512 - followa) & 2047]) >> 10; + + followx += (followsvel * sintable[(512 + 1024 - 512 - followa) & 2047]) >> 10; + followy -= (followsvel * sintable[(512 + 2048 - followa) & 2047]) >> 10; + } + + lockclock += TICSPERFRAME; +} + +void GameInterface::MenuSound(EMenuSounds snd) +{ + if (!isWh2()) SND_Sound(85); + else SND_Sound(59); +} + + ::GameInterface* CreateInterface() { return new GameInterface; } + END_WH_NS diff --git a/source/games/whaven/src/sound.cpp b/source/games/whaven/src/sound.cpp index 4aef704f8..18cd8aec6 100644 --- a/source/games/whaven/src/sound.cpp +++ b/source/games/whaven/src/sound.cpp @@ -144,15 +144,16 @@ int playsound_internal(int sn, spritetype *spr, int x, int y, int loop, int chan sn++; if (!soundEngine->isValidSoundId(sn)) return -1; int sourcetype = spr ? SOURCE_Actor : x != 0 || y != 0 ? SOURCE_Unattached : SOURCE_None; - vec3_t pos = { x, y, 0 }; + vec3_t pos = { x, y, 0 }; auto spos = GetSoundPos(&pos); float attn = sourcetype == SOURCE_None ? 0 : 1; int flags = sourcetype == SOURCE_Unattached ? CHANF_LISTENERZ : CHANF_NONE; if (loop != 0) flags |= CHANF_LOOP; auto sfx = soundEngine->StartSound(sourcetype, spr, &spos, chan, EChanFlags::FromInt(flags), sn, 1.f, attn); - if (loop > 0 && sfx) sfx->UserData = IntToFixed(loop); + if (!sfx) return -1; + if (loop > 0) sfx->UserData = IntToFixed(loop); else sfx->UserData = 0; - return sfx ? 0 : -1; + return 0; } diff --git a/source/games/whaven/src/wh.cpp b/source/games/whaven/src/wh.cpp index ca1cc77b3..7e1847ec5 100644 --- a/source/games/whaven/src/wh.cpp +++ b/source/games/whaven/src/wh.cpp @@ -19,7 +19,6 @@ int playertorch = 0; uint8_t ceilingshadearray[MAXSECTORS]; uint8_t floorshadearray[MAXSECTORS]; uint8_t wallshadearray[MAXWALLS]; -int hours, minutes, seconds, fortieth; short floormirrorsector[64]; int floormirrorcnt; int displaytime = -1; diff --git a/source/games/whaven/src/wh.h b/source/games/whaven/src/wh.h index c1565dfab..ff8a35098 100644 --- a/source/games/whaven/src/wh.h +++ b/source/games/whaven/src/wh.h @@ -152,7 +152,6 @@ extern int playertorch; extern uint8_t ceilingshadearray[MAXSECTORS]; extern uint8_t floorshadearray[MAXSECTORS]; extern uint8_t wallshadearray[MAXWALLS]; -extern int hours, minutes, seconds, fortieth; extern short floormirrorsector[64]; extern int floormirrorcnt; extern int displaytime; @@ -453,6 +452,7 @@ inline void startblueflash(int) {} +void updatesounds(); int playsound_internal(int sn, spritetype* spr, int x, int y, int loop, int chan); inline int playsound(int sn, int x, int y, int loop = 0, int channel = CHAN_AUTO) { @@ -473,6 +473,14 @@ void setupmidi(); extern int attacktheme; +inline int insertsprite(int sectnum, int statnum) +{ + int j = ::insertsprite(sectnum, statnum); + if (j != -1) + sprite[j].detail = 0; + return j; +} + void startWh2Ending(); @@ -498,7 +506,7 @@ struct GameInterface : public ::GameInterface //void PlayHudSound() override; //GameStats getStats() override; //void MenuOpened() override; - //void MenuSound(EMenuSounds snd) override; + void MenuSound(EMenuSounds snd) override; bool CanSave() override; //bool StartGame(FNewGameStartup& gs) override; //FSavegameInfo GetSaveSig() override; @@ -513,7 +521,7 @@ struct GameInterface : public ::GameInterface void Startup() override; void DrawBackground() override; //void Render() override; - //void Ticker() override; + void Ticker() override; const char* GenericCheat(int player, int cheat) override; const char* CheckCheatMode() override; //void NextLevel(MapRecord* map, int skill) override; diff --git a/source/games/whaven/src/whmap.cpp b/source/games/whaven/src/whmap.cpp index a00a52800..2523e6e05 100644 --- a/source/games/whaven/src/whmap.cpp +++ b/source/games/whaven/src/whmap.cpp @@ -243,11 +243,6 @@ boolean prepareboard(const char* fname) { damage_svel = 0; damage_vel = 0; - hours = 0; - minutes = 0; - seconds = 0; - fortieth = 0; - // goblinwarcnt = 0; treasurescnt = 0; treasuresfound = 0;