Browse Source

Limit what gets called in headless mode

pull/4991/head
Anders Jenbo 4 years ago committed by obligaron
parent
commit
ac2bf9aaac
  1. 66
      Source/control.cpp
  2. 68
      Source/diablo.cpp
  3. 2
      Source/engine/demomode.cpp
  4. 6
      Source/engine/dx.cpp
  5. 17
      Source/engine/palette.cpp
  6. 8
      Source/engine/render/scrollrt.cpp
  7. 4
      Source/gmenu.cpp
  8. 3
      Source/inv.cpp
  9. 6
      Source/items.cpp
  10. 1
      Source/minitext.cpp
  11. 3
      Source/misdat.cpp
  12. 18
      Source/monster.cpp
  13. 36
      Source/objects.cpp
  14. 8
      Source/player.cpp

66
Source/control.cpp

@ -544,30 +544,34 @@ void control_update_life_mana()
void InitControlPan()
{
pBtmBuff.emplace(GetMainPanel().size.width, (GetMainPanel().size.height + 16) * (IsChatAvailable() ? 2 : 1));
pManaBuff.emplace(88, 88);
pLifeBuff.emplace(88, 88);
LoadCharPanel();
LoadSpellIcons();
{
const OwnedCelSprite sprite = LoadCel("CtrlPan\\Panel8.CEL", GetMainPanel().size.width);
CelDrawUnsafeTo(*pBtmBuff, { 0, (GetMainPanel().size.height + 16) - 1 }, CelSprite { sprite }, 0);
}
{
const Point bulbsPosition { 0, 87 };
const OwnedCelSprite statusPanel = LoadCel("CtrlPan\\P8Bulbs.CEL", 88);
CelDrawUnsafeTo(*pLifeBuff, bulbsPosition, CelSprite { statusPanel }, 0);
CelDrawUnsafeTo(*pManaBuff, bulbsPosition, CelSprite { statusPanel }, 1);
if (!HeadlessMode) {
pBtmBuff.emplace(GetMainPanel().size.width, (GetMainPanel().size.height + 16) * (IsChatAvailable() ? 2 : 1));
pManaBuff.emplace(88, 88);
pLifeBuff.emplace(88, 88);
LoadCharPanel();
LoadSpellIcons();
{
const OwnedCelSprite sprite = LoadCel("CtrlPan\\Panel8.CEL", GetMainPanel().size.width);
CelDrawUnsafeTo(*pBtmBuff, { 0, (GetMainPanel().size.height + 16) - 1 }, CelSprite { sprite }, 0);
}
{
const Point bulbsPosition { 0, 87 };
const OwnedCelSprite statusPanel = LoadCel("CtrlPan\\P8Bulbs.CEL", 88);
CelDrawUnsafeTo(*pLifeBuff, bulbsPosition, CelSprite { statusPanel }, 0);
CelDrawUnsafeTo(*pManaBuff, bulbsPosition, CelSprite { statusPanel }, 1);
}
}
talkflag = false;
if (IsChatAvailable()) {
{
const OwnedCelSprite sprite = LoadCel("CtrlPan\\TalkPanl.CEL", GetMainPanel().size.width);
CelDrawUnsafeTo(*pBtmBuff, { 0, (GetMainPanel().size.height + 16) * 2 - 1 }, CelSprite { sprite }, 0);
if (!HeadlessMode) {
{
const OwnedCelSprite sprite = LoadCel("CtrlPan\\TalkPanl.CEL", GetMainPanel().size.width);
CelDrawUnsafeTo(*pBtmBuff, { 0, (GetMainPanel().size.height + 16) * 2 - 1 }, CelSprite { sprite }, 0);
}
multiButtons = LoadCel("CtrlPan\\P8But2.CEL", 33);
talkButtons = LoadCel("CtrlPan\\TalkButt.CEL", 61);
}
multiButtons = LoadCel("CtrlPan\\P8But2.CEL", 33);
talkButtons = LoadCel("CtrlPan\\TalkButt.CEL", 61);
sgbPlrTalkTbl = 0;
TalkMessage[0] = '\0';
for (bool &whisper : WhisperList)
@ -575,20 +579,23 @@ void InitControlPan()
for (bool &talkButtonDown : TalkButtonsDown)
talkButtonDown = false;
}
LoadMainPanel();
panelflag = false;
lvlbtndown = false;
pPanelButtons = LoadCel("CtrlPan\\Panel8bu.CEL", 71);
if (!HeadlessMode) {
LoadMainPanel();
pPanelButtons = LoadCel("CtrlPan\\Panel8bu.CEL", 71);
pChrButtons = LoadCel("Data\\CharBut.CEL", 41);
}
ClearPanBtn();
if (!IsChatAvailable())
PanelButtonIndex = 6;
else
PanelButtonIndex = 8;
pChrButtons = LoadCel("Data\\CharBut.CEL", 41);
if (!HeadlessMode)
pDurIcons = LoadCel("Items\\DurIcons.CEL", 32);
for (bool &buttonEnabled : chrbtn)
buttonEnabled = false;
chrbtnactive = false;
pDurIcons = LoadCel("Items\\DurIcons.CEL", 32);
InfoString = {};
ClearPanel();
drawhpflag = true;
@ -598,9 +605,11 @@ void InitControlPan()
sbooktab = 0;
sbookflag = false;
InitSpellBook();
pQLogCel = LoadCel("Data\\Quest.CEL", static_cast<uint16_t>(SidePanelSize.width));
pGBoxBuff = LoadCel("CtrlPan\\Golddrop.cel", 261);
if (!HeadlessMode) {
InitSpellBook();
pQLogCel = LoadCel("Data\\Quest.CEL", static_cast<uint16_t>(SidePanelSize.width));
pGBoxBuff = LoadCel("CtrlPan\\Golddrop.cel", 261);
}
CloseGoldDrop();
dropGoldValue = 0;
initialDropGoldValue = 0;
@ -608,7 +617,8 @@ void InitControlPan()
CalculatePanelAreas();
InitModifierHints();
if (!HeadlessMode)
InitModifierHints();
}
void DrawCtrlPan(const Surface &out)

68
Source/diablo.cpp

@ -693,20 +693,16 @@ void GameEventHandler(uint32_t uMsg, int32_t wParam, int32_t lParam)
if (gbIsMultiplayer)
pfile_write_hero();
nthread_ignore_mutex(true);
if (!HeadlessMode) {
PaletteFadeOut(8);
sound_stop();
}
PaletteFadeOut(8);
sound_stop();
LastMouseButtonAction = MouseActionType::None;
sgbMouseDown = CLICK_NONE;
ShowProgress((interface_mode)uMsg);
force_redraw = 255;
if (!HeadlessMode) {
DrawAndBlit();
LoadPWaterPalette();
if (gbRunGame)
PaletteFadeIn(8);
}
DrawAndBlit();
LoadPWaterPalette();
if (gbRunGame)
PaletteFadeIn(8);
nthread_ignore_mutex(false);
gbGameLoopStartup = true;
return;
@ -729,13 +725,11 @@ void RunGameLoop(interface_mode uMsg)
gbRunGame = true;
gbProcessPlayers = true;
gbRunGameResult = true;
if (!HeadlessMode) {
force_redraw = 255;
DrawAndBlit();
LoadPWaterPalette();
PaletteFadeIn(8);
force_redraw = 255;
}
force_redraw = 255;
DrawAndBlit();
LoadPWaterPalette();
PaletteFadeIn(8);
force_redraw = 255;
gbGameLoopStartup = true;
nthread_ignore_mutex(false);
@ -804,13 +798,11 @@ void RunGameLoop(interface_mode uMsg)
sfile_write_stash();
}
if (!HeadlessMode) {
PaletteFadeOut(8);
NewCursor(CURSOR_NONE);
ClearScreenBuffer();
force_redraw = 255;
scrollrt_draw_game_screen();
}
PaletteFadeOut(8);
NewCursor(CURSOR_NONE);
ClearScreenBuffer();
force_redraw = 255;
scrollrt_draw_game_screen();
previousHandler = SetEventHandler(previousHandler);
assert(HeadlessMode || previousHandler == GameEventHandler);
FreeGame();
@ -2101,13 +2093,18 @@ void LoadGameLevel(bool firstflag, lvl_entry lvldir)
IncProgress();
if (firstflag) {
InitInv();
InitStash();
InitQuestText();
InitInfoBoxGfx();
CloseInventory();
drawsbarflag = false;
qtextflag = false;
if (!HeadlessMode) {
InitInv();
InitStash();
InitQuestText();
InitInfoBoxGfx();
InitHelp();
}
InitStores();
InitAutomapOnce();
InitHelp();
}
SetRndSeed(glSeedTbl[currlevel]);
@ -2143,8 +2140,9 @@ void LoadGameLevel(bool firstflag, lvl_entry lvldir)
if (leveltype != DTYPE_TOWN) {
GetLevelMTypes();
InitThemes();
LoadAllGFX();
} else {
if (!HeadlessMode)
LoadAllGFX();
} else if (!HeadlessMode) {
IncProgress();
#if !defined(USE_SDL1) && !defined(__vita__)
InitVirtualGamepadGFX(renderer);
@ -2249,11 +2247,13 @@ void LoadGameLevel(bool firstflag, lvl_entry lvldir)
InitGolems();
InitMonsters();
IncProgress();
if (!HeadlessMode) {
#if !defined(USE_SDL1) && !defined(__vita__)
InitVirtualGamepadGFX(renderer);
InitVirtualGamepadGFX(renderer);
#endif
InitMissileGFX(gbIsHellfire);
IncProgress();
InitMissileGFX(gbIsHellfire);
IncProgress();
}
InitCorpses();
IncProgress();
LoadLevelSOLData();

2
Source/engine/demomode.cpp

@ -296,7 +296,7 @@ void NotifyGameLoopEnd()
CreateDemoReference = false;
}
if (IsRunning()) {
if (IsRunning() && !HeadlessMode) {
float seconds = (SDL_GetTicks() - StartTime) / 1000.0f;
SDL_Log("%d frames, %.2f seconds: %.1f fps", LogicTick, seconds, LogicTick / seconds);
gbRunGameResult = false;

6
Source/engine/dx.cpp

@ -157,6 +157,9 @@ void BltFast(SDL_Rect *srcRect, SDL_Rect *dstRect)
void Blit(SDL_Surface *src, SDL_Rect *srcRect, SDL_Rect *dstRect)
{
if (HeadlessMode)
return;
SDL_Surface *dst = GetOutputSurface();
#ifndef USE_SDL1
if (SDL_BlitSurface(src, srcRect, dst, dstRect) < 0)
@ -207,6 +210,9 @@ void Blit(SDL_Surface *src, SDL_Rect *srcRect, SDL_Rect *dstRect)
void RenderPresent()
{
if (HeadlessMode)
return;
SDL_Surface *surface = GetOutputSurface();
if (!gbActive) {

17
Source/engine/palette.cpp

@ -176,6 +176,9 @@ void CycleColorsReverse(int from, int to)
void palette_update(int first, int ncolor)
{
if (HeadlessMode)
return;
assert(Palette);
if (SDLC_SetSurfaceAndPaletteColors(PalSurface, Palette.get(), system_palette, first, ncolor) < 0) {
ErrSdl();
@ -206,6 +209,9 @@ void LoadPalette(const char *pszFileName, bool blend /*= true*/)
{
assert(pszFileName);
if (HeadlessMode)
return;
struct Color {
uint8_t r;
uint8_t g;
@ -238,6 +244,9 @@ void LoadPalette(const char *pszFileName, bool blend /*= true*/)
void LoadRndLvlPal(dungeon_type l)
{
if (HeadlessMode)
return;
if (l == DTYPE_TOWN) {
LoadPalette("Levels\\TownData\\Town.pal");
return;
@ -293,6 +302,9 @@ int UpdateGamma(int gamma)
void SetFadeLevel(int fadeval)
{
if (HeadlessMode)
return;
for (int i = 0; i < 256; i++) {
system_palette[i].r = (fadeval * logical_palette[i].r) / 256;
system_palette[i].g = (fadeval * logical_palette[i].g) / 256;
@ -311,6 +323,9 @@ void BlackPalette()
void PaletteFadeIn(int fr)
{
if (HeadlessMode)
return;
ApplyGamma(logical_palette, orig_palette, 256);
const uint32_t tc = SDL_GetTicks();
@ -334,7 +349,7 @@ void PaletteFadeIn(int fr)
void PaletteFadeOut(int fr)
{
if (!sgbFadedIn)
if (!sgbFadedIn || HeadlessMode)
return;
const uint32_t tc = SDL_GetTicks();

8
Source/engine/render/scrollrt.cpp

@ -1560,6 +1560,9 @@ extern SDL_Surface *PalSurface;
void ClearScreenBuffer()
{
if (HeadlessMode)
return;
assert(PalSurface != nullptr);
SDL_FillRect(PalSurface, nullptr, 0);
}
@ -1652,6 +1655,9 @@ void EnableFrameCount()
void scrollrt_draw_game_screen()
{
if (HeadlessMode)
return;
int hgt = 0;
if (force_redraw == 255) {
@ -1676,7 +1682,7 @@ void scrollrt_draw_game_screen()
void DrawAndBlit()
{
if (!gbRunGame) {
if (!gbRunGame || HeadlessMode) {
return;
}

4
Source/gmenu.cpp

@ -190,6 +190,10 @@ void gmenu_init_menu()
gmenu_current_option = nullptr;
sgCurrentMenuIdx = 0;
mouseNavigation = false;
if (HeadlessMode)
return;
if (gbIsHellfire)
sgpLogo = LoadCel("Data\\hf_logo3.CEL", 430);
else

3
Source/inv.cpp

@ -1077,9 +1077,6 @@ void InitInv()
pInvCels = LoadCel(!gbIsSpawn ? "Data\\Inv\\Inv_Sor.CEL" : "Data\\Inv\\Inv.CEL", static_cast<uint16_t>(SidePanelSize.width));
break;
}
CloseInventory();
drawsbarflag = false;
}
void DrawInv(const Surface &out)

6
Source/items.cpp

@ -3771,6 +3771,9 @@ void DrawUniqueInfo(const Surface &out)
void PrintItemDetails(const Item &item)
{
if (HeadlessMode)
return;
if (item._iClass == ICLASS_WEAPON) {
if (item._iMinDam == item._iMaxDam) {
if (item._iMaxDur == DUR_INDESTRUCTIBLE)
@ -3809,6 +3812,9 @@ void PrintItemDetails(const Item &item)
void PrintItemDur(const Item &item)
{
if (HeadlessMode)
return;
if (item._iClass == ICLASS_WEAPON) {
if (item._iMinDam == item._iMaxDam) {
if (item._iMaxDur == DUR_INDESTRUCTIBLE)

1
Source/minitext.cpp

@ -127,7 +127,6 @@ void FreeQuestText()
void InitQuestText()
{
pTextBoxCels = LoadCel("Data\\TextBox.CEL", 591);
qtextflag = false;
}
void InitQTextMsg(_speech_id m)

3
Source/misdat.cpp

@ -248,6 +248,9 @@ void MissileFileData::LoadGFX()
void InitMissileGFX(bool loadHellfireGraphics)
{
if (HeadlessMode)
return;
for (size_t mi = 0; MissileSpriteData[mi].animFAmt != 0; mi++) {
if (!loadHellfireGraphics && mi > MFILE_SCBSEXPD)
break;

18
Source/monster.cpp

@ -3612,11 +3612,13 @@ void InitMonsterGFX(size_t monsterTypeIndex)
};
std::array<uint32_t, MaxAnims> animOffsets;
monster.animData = MultiFileLoader<MaxAnims> {}(
numAnims,
FileNameWithCharAffixGenerator({ "Monsters\\", monsterData.GraphicType }, ".CL2", Animletter),
animOffsets.data(),
hasAnim);
if (HeadlessMode) {
monster.animData = MultiFileLoader<MaxAnims> {}(
numAnims,
FileNameWithCharAffixGenerator({ "Monsters\\", monsterData.GraphicType }, ".CL2", Animletter),
animOffsets.data(),
hasAnim);
}
for (unsigned animIndex = 0; animIndex < numAnims; animIndex++) {
AnimStruct &anim = monster.anims[animIndex];
@ -3630,6 +3632,9 @@ void InitMonsterGFX(size_t monsterTypeIndex)
anim.rate = monsterData.Rate[animIndex];
anim.width = width;
if (HeadlessMode)
continue;
byte *cl2Data = &monster.animData[animOffsets[animIndex]];
if (IsDirectionalAnim(monster, animIndex)) {
CelGetDirectionFrames(cl2Data, anim.celSpritesForDirections.data());
@ -3642,6 +3647,9 @@ void InitMonsterGFX(size_t monsterTypeIndex)
monster.data = &monsterData;
if (HeadlessMode)
return;
if (monsterData.TransFile != nullptr) {
InitMonsterTRN(monster);
}

36
Source/objects.cpp

@ -766,15 +766,17 @@ void SetupObject(Object &object, Point position, _object_id ot)
object_graphic_id ofi = objectData.ofindex;
object.position = position;
const auto &found = std::find(std::begin(ObjFileList), std::end(ObjFileList), ofi);
if (found == std::end(ObjFileList)) {
LogCritical("Unable to find object_graphic_id {} in list of objects to load, level generation error.", ofi);
return;
}
if (!HeadlessMode) {
const auto &found = std::find(std::begin(ObjFileList), std::end(ObjFileList), ofi);
if (found == std::end(ObjFileList)) {
LogCritical("Unable to find object_graphic_id {} in list of objects to load, level generation error.", ofi);
return;
}
const int j = std::distance(std::begin(ObjFileList), found);
const int j = std::distance(std::begin(ObjFileList), found);
object._oAnimData = pObjCels[j].get();
object._oAnimData = pObjCels[j].get();
}
object._oAnimFlag = objectData.oAnimFlag;
if (object._oAnimFlag) {
object._oAnimDelay = objectData.oAnimDelay;
@ -4077,6 +4079,9 @@ bool IsItemBlockingObjectAtPosition(Point position)
void LoadLevelObjects(bool filesLoaded[65])
{
if (HeadlessMode)
return;
for (const ObjectData objectData : AllObjects) {
if (leveltype == objectData.olvltype) {
filesLoaded[objectData.ofindex] = true;
@ -5171,15 +5176,18 @@ void SyncObjectAnim(Object &object)
{
object_graphic_id index = AllObjects[object._otype].ofindex;
const auto &found = std::find(std::begin(ObjFileList), std::end(ObjFileList), index);
if (found == std::end(ObjFileList)) {
LogCritical("Unable to find object_graphic_id {} in list of objects to load, level generation error.", index);
return;
}
if (!HeadlessMode) {
const auto &found = std::find(std::begin(ObjFileList), std::end(ObjFileList), index);
if (found == std::end(ObjFileList)) {
LogCritical("Unable to find object_graphic_id {} in list of objects to load, level generation error.", index);
return;
}
const int i = std::distance(std::begin(ObjFileList), found);
const int i = std::distance(std::begin(ObjFileList), found);
object._oAnimData = pObjCels[i].get();
}
object._oAnimData = pObjCels[i].get();
switch (object._otype) {
case OBJ_L1LDOOR:
case OBJ_L1RDOOR:

8
Source/player.cpp

@ -375,7 +375,7 @@ void SetPlayerGPtrs(const char *path, std::unique_ptr<byte[]> &data, std::array<
{
data = nullptr;
data = LoadFileInMem(path);
if (data == nullptr && HeadlessMode)
if (data == nullptr)
return;
const byte *directionFrames[8];
@ -2182,6 +2182,9 @@ Player *PlayerAtPosition(Point position)
void LoadPlrGFX(Player &player, player_graphic graphic)
{
if (HeadlessMode)
return;
auto &animationData = player.AnimationData[static_cast<size_t>(graphic)];
if (animationData.RawData != nullptr)
return;
@ -2298,6 +2301,9 @@ void LoadPlrGFX(Player &player, player_graphic graphic)
void InitPlayerGFX(Player &player)
{
if (HeadlessMode)
return;
ResetPlayerGFX(player);
if (player._pHitPoints >> 6 == 0) {

Loading…
Cancel
Save