//------------------------------------------------------------------------- /* Copyright (C) 2010-2019 EDuke32 developers and contributors Copyright (C) 2019 Nuke.YKT This file is part of NBlood. NBlood is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ //------------------------------------------------------------------------- #pragma once #include "compat.h" #include "build.h" #include "palette.h" #include "common_game.h" #include "messages.h" #include "player.h" #include "interpolate.h" BEGIN_BLD_NS struct VIEW { int bobPhase; int Kills; int bobHeight; // bob height int bobWidth; // bob width int at10; int at14; int shakeBobY; // bob sway y int shakeBobX; // bob sway x fixedhoriz horiz; // horiz fixedhoriz horizoff; // horizoff int at2c; binangle angle; // angle int weaponZ; // weapon z int viewz; // view z int at3c; int at40; int at44; int at48; // posture double spin; // spin int x; // x int y; // y int z; // z int xvel; //xvel int yvel; //yvel int zvel; //zvel short sectnum; // sectnum unsigned int floordist; // floordist char at6e; // look center char at6f; char at70; // run char at71; // jump char at72; // underwater short at73; // sprite flags SPRITEHIT at75; binangle look_ang; binangle rotscrnang; }; extern VIEW gPrevView[kMaxPlayers]; extern VIEW predict, predictOld; extern bool gPrediction; enum VIEW_EFFECT { kViewEffectShadow = 0, kViewEffectFlareHalo, kViewEffectCeilGlow, kViewEffectFloorGlow, kViewEffectTorchHigh, kViewEffectTorchLow, kViewEffectSmokeHigh, kViewEffectSmokeLow, kViewEffectFlame, kViewEffectSpear, kViewEffectTrail, kViewEffectPhase, kViewEffectShowWeapon, kViewEffectReflectiveBall, kViewEffectShoot, kViewEffectTesla, kViewEffectFlag, kViewEffectBigFlag, kViewEffectAtom, kViewEffectSpotProgress, }; enum VIEWPOS { VIEWPOS_0 = 0, VIEWPOS_1 }; enum { kBackTile = 253, kCrosshairTile = 2319, kLoadScreen = 2049, kLoadScreenWideBack = 9216, kLoadScreenWideLeft = 9217, kLoadScreenWideRight = 9218, kLoadScreenWideMiddle = 9219, kSBarNumberHealth = 9220, kSBarNumberAmmo = 9230, kSBarNumberInv = 9240, kSBarNumberArmor1 = 9250, kSBarNumberArmor2 = 9260, kSBarNumberArmor3 = 9270, }; enum { kFontNum = 5 }; extern FFont *gFont[kFontNum]; extern VIEWPOS gViewPos; extern int gViewIndex; extern int gScreenTilt; extern int deliriumTilt, deliriumTurn, deliriumPitch; extern int gScreenTiltO, deliriumTurnO, deliriumPitchO; extern int gShowFrameRate; extern FixedBitArray gInterpolateSprite; extern int gLastPal; extern double gInterpolate; void hudDraw(PLAYER* gView, int nSectnum, double bobx, double boby, double zDelta, int basepal, double smoothratio); void viewInitializePrediction(void); void viewUpdatePrediction(InputPacket *pInput); void viewCorrectPrediction(void); void viewBackupView(int nPlayer); void viewCorrectViewOffsets(int nPlayer, vec3_t const *oldpos); void InitStatusBar(void); void UpdateStatusBar(); void viewInit(void); void viewProcessSprites(spritetype* tsprite, int& spritesortcnt, int32_t cX, int32_t cY, int32_t cZ, int32_t cA, int32_t smooth); void viewSetMessage(const char *pMessage, const int pal = 0, const MESSAGE_PRIORITY priority = MESSAGE_PRIORITY_NORMAL); void viewSetErrorMessage(const char *pMessage); void DoLensEffect(void); void UpdateDacs(int nPalette, bool bNoTint = false); void viewDrawScreen(bool sceneonly = false); void viewUpdateDelirium(void); void viewSetSystemMessage(const char* pMessage, ...); inline void viewInterpolateSector(int nSector, sectortype *pSector) { StartInterpolation(nSector, Interp_Sect_Floorz); StartInterpolation(nSector, Interp_Sect_Ceilingz); StartInterpolation(nSector, Interp_Sect_Floorheinum); } inline void viewInterpolateWall(int nWall, walltype *pWall) { StartInterpolation(nWall, Interp_Wall_X); StartInterpolation(nWall, Interp_Wall_Y); } inline void viewBackupSpriteLoc(int nSprite, spritetype *pSprite) { if (!gInterpolateSprite[nSprite]) { pSprite->backuploc(); gInterpolateSprite.Set(nSprite); } } END_BLD_NS