Browse Source

Split up `engine.{h,cpp}`

Untangles dependencies by splitting up `engine.{h,cpp}` into 3 files:

1. `primitive_render`
2. `ticks` -- only contains `GetAnimationFrame` for now.
3. `GetWidth2` renamed to `CalculateSpriteTileCenterX` and moved to `levels/dun_tile.hpp`.
pull/7628/head
Gleb Mazovetskiy 1 year ago
parent
commit
c31836eab8
  1. 3
      Source/CMakeLists.txt
  2. 1
      Source/DiabloUI/diabloui.cpp
  3. 5
      Source/appfat.cpp
  4. 2
      Source/appfat.h
  5. 1
      Source/automap.cpp
  6. 1
      Source/control.h
  7. 2
      Source/controls/modifier_hints.h
  8. 2
      Source/controls/touch/event_handlers.cpp
  9. 2
      Source/controls/touch/renderers.cpp
  10. 2
      Source/cursor.cpp
  11. 6
      Source/cursor.h
  12. 4
      Source/dead.h
  13. 3
      Source/debug.h
  14. 1
      Source/diablo_msg.cpp
  15. 3
      Source/diablo_msg.hpp
  16. 2
      Source/doom.cpp
  17. 2
      Source/doom.h
  18. 1
      Source/engine/backbuffer_state.cpp
  19. 2
      Source/engine/clx_sprite.hpp
  20. 1
      Source/engine/displacement.hpp
  21. 2
      Source/engine/dx.cpp
  22. 4
      Source/engine/dx.h
  23. 2
      Source/engine/events.cpp
  24. 43
      Source/engine/point.hpp
  25. 4
      Source/engine/render/automap_render.cpp
  26. 2
      Source/engine/render/automap_render.hpp
  27. 2
      Source/engine/render/clx_render.hpp
  28. 61
      Source/engine/render/primitive_render.cpp
  29. 52
      Source/engine/render/primitive_render.hpp
  30. 2
      Source/engine/render/scrollrt.cpp
  31. 8
      Source/engine/render/scrollrt.h
  32. 5
      Source/engine/render/text_render.cpp
  33. 1
      Source/engine/render/text_render.hpp
  34. 14
      Source/engine/ticks.cpp
  35. 9
      Source/engine/ticks.hpp
  36. 2
      Source/gmenu.cpp
  37. 2
      Source/gmenu.h
  38. 2
      Source/help.h
  39. 2
      Source/interfac.cpp
  40. 1
      Source/items.cpp
  41. 5
      Source/items.h
  42. 8
      Source/levels/dun_tile.hpp
  43. 4
      Source/levels/setmaps.h
  44. 3
      Source/lighting.h
  45. 8
      Source/loadsave.cpp
  46. 2
      Source/lua/modules/dev/quests.cpp
  47. 2
      Source/minitext.cpp
  48. 2
      Source/minitext.h
  49. 4
      Source/missiles.cpp
  50. 2
      Source/missiles.h
  51. 4
      Source/monster.h
  52. 1
      Source/mpq/mpq_writer.cpp
  53. 3
      Source/objects.h
  54. 2
      Source/panels/console.cpp
  55. 2
      Source/panels/spell_icons.cpp
  56. 2
      Source/panels/spell_list.cpp
  57. 2
      Source/pfile.cpp
  58. 5
      Source/player.h
  59. 1
      Source/playerdat.hpp
  60. 1
      Source/plrmsg.cpp
  61. 2
      Source/plrmsg.h
  62. 3
      Source/qol/chatlog.h
  63. 1
      Source/qol/itemlabels.cpp
  64. 3
      Source/qol/itemlabels.h
  65. 1
      Source/qol/monhealthbar.cpp
  66. 1
      Source/qol/xpbar.cpp
  67. 2
      Source/quests.h
  68. 1
      Source/stores.cpp
  69. 2
      Source/stores.h
  70. 4
      Source/towners.h
  71. 2
      test/dead_test.cpp

3
Source/CMakeLists.txt

@ -13,7 +13,6 @@ set(libdevilutionx_SRCS
diablo.cpp
diablo_msg.cpp
doom.cpp
engine.cpp
gamemenu.cpp
gmenu.cpp
help.cpp
@ -112,11 +111,13 @@ set(libdevilutionx_SRCS
engine/random.cpp
engine/sound_position.cpp
engine/surface.cpp
engine/ticks.cpp
engine/trn.cpp
engine/render/automap_render.cpp
engine/render/clx_render.cpp
engine/render/dun_render.cpp
engine/render/primitive_render.cpp
engine/render/scrollrt.cpp
engine/render/text_render.cpp

1
Source/DiabloUI/diabloui.cpp

@ -21,6 +21,7 @@
#include "engine/dx.h"
#include "engine/load_pcx.hpp"
#include "engine/render/clx_render.hpp"
#include "engine/ticks.hpp"
#include "hwcursor.hpp"
#include "utils/algorithm/container.hpp"
#include "utils/display.h"

5
Source/appfat.cpp

@ -6,8 +6,13 @@
#include <config.h>
#include <SDL.h>
#include <fmt/format.h>
#ifdef USE_SDL1
#include "utils/sdl2_to_1_2_backports.h"
#endif
#include "diablo.h"
#include "multi.h"
#include "storm/storm_net.hpp"

2
Source/appfat.h

@ -7,8 +7,6 @@
#include <string_view>
#include <SDL.h>
#include "utils/attributes.h"
namespace devilution {

1
Source/automap.cpp

@ -14,6 +14,7 @@
#include "engine/load_file.hpp"
#include "engine/palette.h"
#include "engine/render/automap_render.hpp"
#include "engine/render/primitive_render.hpp"
#include "levels/gendung.h"
#include "levels/setmaps.h"
#include "player.h"

1
Source/control.h

@ -20,7 +20,6 @@
#include "DiabloUI/text_input.hpp"
#include "DiabloUI/ui_flags.hpp"
#include "engine.h"
#include "engine/displacement.hpp"
#include "engine/point.hpp"
#include "engine/rectangle.hpp"

2
Source/controls/modifier_hints.h

@ -1,6 +1,6 @@
#pragma once
#include "engine.h"
#include "engine/surface.hpp"
namespace devilution {

2
Source/controls/touch/event_handlers.cpp

@ -4,7 +4,7 @@
#include "controls/plrctrls.h"
#include "cursor.h"
#include "diablo.h"
#include "engine.h"
#include "engine/render/primitive_render.hpp"
#include "engine/render/scrollrt.h"
#include "gmenu.h"
#include "inv.h"

2
Source/controls/touch/renderers.cpp

@ -4,9 +4,9 @@
#include "cursor.h"
#include "diablo.h"
#include "doom.h"
#include "engine.h"
#include "engine/events.hpp"
#include "engine/render/clx_render.hpp"
#include "engine/render/primitive_render.hpp"
#include "init.h"
#include "inv.h"
#include "levels/gendung.h"

2
Source/cursor.cpp

@ -17,12 +17,12 @@
#include "control.h"
#include "controls/plrctrls.h"
#include "doom.h"
#include "engine.h"
#include "engine/backbuffer_state.hpp"
#include "engine/demomode.h"
#include "engine/point.hpp"
#include "engine/points_in_rectangle_range.hpp"
#include "engine/render/clx_render.hpp"
#include "engine/render/primitive_render.hpp"
#include "engine/trn.hpp"
#include "hwcursor.hpp"
#include "inv.h"

6
Source/cursor.h

@ -6,11 +6,11 @@
#pragma once
#include <cstdint>
#include <optional>
#include <utility>
#include "engine.h"
#include "engine/clx_sprite.hpp"
#include "engine/point.hpp"
#include "engine/size.hpp"
#include "engine/surface.hpp"
#include "utils/attributes.h"
#include "utils/enum_traits.h"

4
Source/dead.h

@ -5,11 +5,11 @@
*/
#pragma once
#include <array>
#include <cstddef>
#include <cstdint>
#include "engine.h"
#include "engine/clx_sprite.hpp"
#include "engine/direction.hpp"
#include "engine/point.hpp"
namespace devilution {

3
Source/debug.h

@ -6,13 +6,14 @@
#pragma once
#include <cstdint>
#include <string>
#include <string_view>
#include <ankerl/unordered_dense.h>
#include "diablo.h"
#include "engine.h"
#include "engine/clx_sprite.hpp"
#include "engine/point.hpp"
namespace devilution {

1
Source/diablo_msg.cpp

@ -13,6 +13,7 @@
#include "DiabloUI/ui_flags.hpp"
#include "engine/clx_sprite.hpp"
#include "engine/render/clx_render.hpp"
#include "engine/render/primitive_render.hpp"
#include "engine/render/text_render.hpp"
#include "panels/info_box.hpp"
#include "utils/algorithm/container.hpp"

3
Source/diablo_msg.hpp

@ -6,10 +6,9 @@
#pragma once
#include <cstdint>
#include <string>
#include <string_view>
#include "engine.h"
#include "engine/surface.hpp"
namespace devilution {

2
Source/doom.cpp

@ -8,10 +8,10 @@
#include <optional>
#include "control.h"
#include "engine.h"
#include "engine/clx_sprite.hpp"
#include "engine/load_cel.hpp"
#include "engine/render/clx_render.hpp"
#include "engine/render/primitive_render.hpp"
namespace devilution {
namespace {

2
Source/doom.h

@ -5,7 +5,7 @@
*/
#pragma once
#include "engine.h"
#include "engine/surface.hpp"
namespace devilution {

1
Source/engine/backbuffer_state.cpp

@ -1,5 +1,6 @@
#include "engine/backbuffer_state.hpp"
#include <array>
#include <vector>
#include "engine/dx.h"

2
Source/engine/clx_sprite.hpp

@ -25,7 +25,7 @@
#include <cstddef>
#include <cstdint>
#include <cstring>
#include <iterator>
#include <memory>

1
Source/engine/displacement.hpp

@ -7,6 +7,7 @@
#include <ostream>
#endif
#include "appfat.h"
#include "engine/direction.hpp"
#include "engine/size.hpp"
#include "utils/attributes.h"

2
Source/engine/dx.cpp

@ -9,7 +9,7 @@
#include <cstdint>
#include "controls/plrctrls.h"
#include "engine.h"
#include "engine/render/primitive_render.hpp"
#include "options.h"
#include "utils/display.h"
#include "utils/log.hpp"

4
Source/engine/dx.h

@ -5,7 +5,9 @@
*/
#pragma once
#include "engine.h"
#include <SDL.h>
#include "engine/surface.hpp"
namespace devilution {

2
Source/engine/events.cpp

@ -3,8 +3,8 @@
#include <cstdint>
#include "controls/input.h"
#include "engine.h"
#include "engine/demomode.h"
#include "engine/render/primitive_render.hpp"
#include "interfac.h"
#include "movie.h"
#include "options.h"

43
Source/engine/point.hpp

@ -237,4 +237,47 @@ DVL_ALWAYS_INLINE constexpr PointOf<PointCoordT> abs(PointOf<PointCoordT> a)
return { std::abs(a.x), std::abs(a.y) };
}
/**
* @brief Calculate the best fit direction between two points
* @param start Tile coordinate
* @param destination Tile coordinate
* @return A value from the direction enum
*/
inline Direction GetDirection(Point start, Point destination)
{
Direction md;
int mx = destination.x - start.x;
int my = destination.y - start.y;
if (mx >= 0) {
if (my >= 0) {
if (5 * mx <= (my * 2)) // mx/my <= 0.4, approximation of tan(22.5)
return Direction::SouthWest;
md = Direction::South;
} else {
my = -my;
if (5 * mx <= (my * 2))
return Direction::NorthEast;
md = Direction::East;
}
if (5 * my <= (mx * 2)) // my/mx <= 0.4
md = Direction::SouthEast;
} else {
mx = -mx;
if (my >= 0) {
if (5 * mx <= (my * 2))
return Direction::SouthWest;
md = Direction::West;
} else {
my = -my;
if (5 * mx <= (my * 2))
return Direction::NorthEast;
md = Direction::North;
}
if (5 * my <= (mx * 2))
md = Direction::NorthWest;
}
return md;
}
} // namespace devilution

4
Source/engine/render/automap_render.cpp

@ -4,10 +4,12 @@
* Line drawing routines for the automap.
*/
#include "engine/render/automap_render.hpp"
#include "automap.h"
#include <cstdint>
#include "automap.h"
#include "engine/render/primitive_render.hpp"
namespace devilution {
namespace {

2
Source/engine/render/automap_render.hpp

@ -12,8 +12,8 @@
#include <cstdint>
#include "engine.h"
#include "engine/point.hpp"
#include "engine/surface.hpp"
namespace devilution {

2
Source/engine/render/clx_render.hpp

@ -14,9 +14,9 @@
#include <string>
#endif
#include "engine.h"
#include "engine/clx_sprite.hpp"
#include "engine/point.hpp"
#include "engine/surface.hpp"
#include "lighting.h"
namespace devilution {

61
Source/engine.cpp → Source/engine/render/primitive_render.cpp

@ -1,24 +1,13 @@
/**
* @file engine.cpp
*
* Implementation of basic engine helper functions:
* - Sprite blitting
* - Drawing
* - Angle calculation
* - RNG
* - Memory allocation
* - File loading
* - Video playback
*/
#include "engine/render/primitive_render.hpp"
#include <cassert>
#include <cstdint>
#include <cstring>
#include "engine/palette.h"
#include "lighting.h"
#include "movie.h"
#include "options.h"
#include "engine/point.hpp"
#include "engine/size.hpp"
#include "engine/surface.hpp"
namespace devilution {
namespace {
@ -194,46 +183,4 @@ void UnsafeDrawBorder2px(const Surface &out, Rectangle rect, uint8_t color)
std::memset(buf, color, width);
}
Direction GetDirection(Point start, Point destination)
{
Direction md;
int mx = destination.x - start.x;
int my = destination.y - start.y;
if (mx >= 0) {
if (my >= 0) {
if (5 * mx <= (my * 2)) // mx/my <= 0.4, approximation of tan(22.5)
return Direction::SouthWest;
md = Direction::South;
} else {
my = -my;
if (5 * mx <= (my * 2))
return Direction::NorthEast;
md = Direction::East;
}
if (5 * my <= (mx * 2)) // my/mx <= 0.4
md = Direction::SouthEast;
} else {
mx = -mx;
if (my >= 0) {
if (5 * mx <= (my * 2))
return Direction::SouthWest;
md = Direction::West;
} else {
my = -my;
if (5 * mx <= (my * 2))
return Direction::NorthEast;
md = Direction::North;
}
if (5 * my <= (mx * 2))
md = Direction::NorthWest;
}
return md;
}
int CalculateWidth2(int width)
{
return (width - 64) / 2;
}
} // namespace devilution

52
Source/engine.h → Source/engine/render/primitive_render.hpp

@ -1,42 +1,11 @@
/**
* @file engine.h
*
* of basic engine helper functions:
* - Sprite blitting
* - Drawing
* - Angle calculation
* - Memory allocation
* - File loading
* - Video playback
*/
#pragma once
#include <algorithm>
#include <array>
#include <cstdint>
#include <cstdlib>
#include <memory>
#include <utility>
// We include `cinttypes` here so that it is included before `inttypes.h`
// to work around a bug in older GCC versions on some platforms,
// where including `inttypes.h` before `cinttypes` leads to missing
// defines for `PRIuMAX` et al. SDL transitively includes `inttypes.h`.
// See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97044
#include <cinttypes>
#include <cstddef>
#include <SDL.h>
#ifdef USE_SDL1
#include "utils/sdl2_to_1_2_backports.h"
#endif
#include "appfat.h"
#include "engine/point.hpp"
#include "engine/size.hpp"
#include "engine/surface.hpp"
#include "utils/attributes.h"
namespace devilution {
@ -100,25 +69,4 @@ void SetHalfTransparentPixel(const Surface &out, Point position, uint8_t color);
*/
void UnsafeDrawBorder2px(const Surface &out, Rectangle rect, uint8_t color);
/**
* @brief Calculate the best fit direction between two points
* @param start Tile coordinate
* @param destination Tile coordinate
* @return A value from the direction enum
*/
Direction GetDirection(Point start, Point destination);
/**
* @brief Calculate Width2 from the original Width
* Width2 is needed for savegame compatibility and to render animations centered
* @return Returns Width2
*/
int CalculateWidth2(int width);
inline int GetAnimationFrame(int frames, int fps = 60)
{
int frame = (SDL_GetTicks() / fps) % frames;
return frame > frames ? 0 : frame;
}
} // namespace devilution

2
Source/engine/render/scrollrt.cpp

@ -716,7 +716,7 @@ void DrawDungeon(const Surface &out, Point tilePosition, Point targetBufferPosit
if (lightTableIndex < LightsMax && bDead != 0) {
const Corpse &corpse = Corpses[(bDead & 0x1F) - 1];
const Point position { targetBufferPosition.x - CalculateWidth2(corpse.width), targetBufferPosition.y };
const Point position { targetBufferPosition.x - CalculateSpriteTileCenterX(corpse.width), targetBufferPosition.y };
const ClxSprite sprite = corpse.spritesForDirection(static_cast<Direction>((bDead >> 5) & 7))[corpse.frame];
if (corpse.translationPaletteIndex != 0) {
const uint8_t *trn = Monsters[corpse.translationPaletteIndex - 1].uniqueMonsterTRN.get();

8
Source/engine/render/scrollrt.h

@ -5,11 +5,11 @@
*/
#pragma once
#include <cstdint>
#include "engine.h"
#include "engine/animationinfo.h"
#include "engine/direction.hpp"
#include "engine/displacement.hpp"
#include "engine/point.hpp"
#include "engine/surface.hpp"
namespace devilution {
@ -22,7 +22,7 @@ extern bool frameflag;
* @param dir walking direction
* @param cameraMode Adjusts the offset relative to the camera
*/
Displacement GetOffsetForWalking(const AnimationInfo &animationInfo, const Direction dir, bool cameraMode = false);
Displacement GetOffsetForWalking(const AnimationInfo &animationInfo, Direction dir, bool cameraMode = false);
/**
* @brief Clear cursor state

5
Source/engine/render/text_render.cpp

@ -17,7 +17,6 @@
#include "DiabloUI/diabloui.h"
#include "DiabloUI/ui_item.h"
#include "engine.h"
#include "engine/load_cel.hpp"
#include "engine/load_clx.hpp"
#include "engine/load_file.hpp"
@ -25,6 +24,8 @@
#include "engine/palette.h"
#include "engine/point.hpp"
#include "engine/render/clx_render.hpp"
#include "engine/render/primitive_render.hpp"
#include "engine/ticks.hpp"
#include "utils/algorithm/container.hpp"
#include "utils/display.h"
#include "utils/is_of.hpp"
@ -827,7 +828,7 @@ void DrawStringWithColors(const Surface &out, std::string_view fmt, DrawStringFo
uint8_t PentSpn2Spin()
{
return (SDL_GetTicks() / 50) % 8;
return GetAnimationFrame(8, 50);
}
bool IsBreakableWhitespace(char32_t c)

1
Source/engine/render/text_render.hpp

@ -16,7 +16,6 @@
#include <SDL.h>
#include "DiabloUI/ui_flags.hpp"
#include "engine.h"
#include "engine/clx_sprite.hpp"
#include "engine/palette.h"
#include "engine/rectangle.hpp"

14
Source/engine/ticks.cpp

@ -0,0 +1,14 @@
#include "engine/ticks.hpp"
#include <cstdint>
#include <SDL.h>
namespace devilution {
uint32_t GetAnimationFrame(uint32_t frames, uint32_t fps)
{
return (SDL_GetTicks() / fps) % frames;
}
} // namespace devilution

9
Source/engine/ticks.hpp

@ -0,0 +1,9 @@
#pragma once
#include <cstdint>
namespace devilution {
uint32_t GetAnimationFrame(uint32_t frames, uint32_t fps = 60);
} // namespace devilution

2
Source/gmenu.cpp

@ -13,10 +13,10 @@
#include "control.h"
#include "controls/axis_direction.h"
#include "controls/controller_motion.h"
#include "engine.h"
#include "engine/clx_sprite.hpp"
#include "engine/load_cel.hpp"
#include "engine/render/clx_render.hpp"
#include "engine/render/primitive_render.hpp"
#include "engine/render/text_render.hpp"
#include "options.h"
#include "stores.h"

2
Source/gmenu.h

@ -7,7 +7,7 @@
#include <cstdint>
#include "engine.h"
#include "engine/surface.hpp"
namespace devilution {

2
Source/help.h

@ -5,7 +5,7 @@
*/
#pragma once
#include "engine.h"
#include "engine/surface.hpp"
namespace devilution {

2
Source/interfac.cpp

@ -12,7 +12,6 @@
#include <expected.hpp>
#include "control.h"
#include "engine.h"
#include "engine/clx_sprite.hpp"
#include "engine/dx.h"
#include "engine/events.hpp"
@ -20,6 +19,7 @@
#include "engine/load_clx.hpp"
#include "engine/palette.h"
#include "engine/render/clx_render.hpp"
#include "engine/render/primitive_render.hpp"
#include "hwcursor.hpp"
#include "init.h"
#include "loadsave.h"

1
Source/items.cpp

@ -25,6 +25,7 @@
#include "engine/load_cel.hpp"
#include "engine/random.hpp"
#include "engine/render/clx_render.hpp"
#include "engine/render/primitive_render.hpp"
#include "engine/render/text_render.hpp"
#include "init.h"
#include "inv_iterators.hpp"

5
Source/items.h

@ -10,10 +10,11 @@
#include "DiabloUI/ui_flags.hpp"
#include "cursor.h"
#include "engine.h"
#include "engine/animationinfo.h"
#include "engine/point.hpp"
#include "engine/surface.hpp"
#include "itemdat.h"
#include "levels/dun_tile.hpp"
#include "monster.h"
#include "utils/is_of.hpp"
#include "utils/string_or_view.hpp"
@ -462,7 +463,7 @@ struct Item {
[[nodiscard]] Displacement getRenderingOffset(const ClxSprite sprite) const
{
return { -CalculateWidth2(sprite.width()), 0 };
return { -CalculateSpriteTileCenterX(sprite.width()), 0 };
}
};

8
Source/levels/dun_tile.hpp

@ -131,4 +131,12 @@ constexpr int_fast16_t DunFrameTriangleHeight = 31;
constexpr size_t ReencodedTriangleFrameSize = 544 - 32;
constexpr size_t ReencodedTrapezoidFrameSize = 800 - 16;
/**
* @return Returns the center of the sprite relative to the center of the tile.
*/
constexpr int CalculateSpriteTileCenterX(int width)
{
return (width - TILE_WIDTH) / 2;
}
} // namespace devilution

4
Source/levels/setmaps.h

@ -5,10 +5,6 @@
*/
#pragma once
#include "engine.h"
#include "engine/point.hpp"
#include "objects.h"
namespace devilution {
/**

3
Source/lighting.h

@ -15,8 +15,9 @@
#include <function_ref.hpp>
#include "automap.h"
#include "engine.h"
#include "engine/displacement.hpp"
#include "engine/point.hpp"
#include "engine/world_tile.hpp"
#include "utils/attributes.h"
namespace devilution {

8
Source/loadsave.cpp

@ -22,11 +22,11 @@
#include "cursor.h"
#include "dead.h"
#include "doom.h"
#include "engine.h"
#include "engine/point.hpp"
#include "engine/random.hpp"
#include "init.h"
#include "inv.h"
#include "levels/dun_tile.hpp"
#include "lighting.h"
#include "menu.h"
#include "missiles.h"
@ -1077,7 +1077,7 @@ void SaveItem(SaveHelper &file, const Item &item)
// write _iAnimWidth for vanilla compatibility
file.WriteLE<int32_t>(ItemAnimWidth);
// write _iAnimWidth2 for vanilla compatibility
file.WriteLE<int32_t>(CalculateWidth2(ItemAnimWidth));
file.WriteLE<int32_t>(CalculateSpriteTileCenterX(ItemAnimWidth));
file.Skip<uint32_t>(); // _delFlag, unused since 1.02
file.WriteLE<uint8_t>(static_cast<uint8_t>(item.selectionRegion));
file.Skip(3); // Alignment
@ -1195,7 +1195,7 @@ void SavePlayer(SaveHelper &file, const Player &player)
const int animWidth = player.getSpriteWidth();
file.WriteLE<int32_t>(animWidth);
// write _pAnimWidth2 for vanilla compatibility
file.WriteLE<int32_t>(CalculateWidth2(animWidth));
file.WriteLE<int32_t>(CalculateSpriteTileCenterX(animWidth));
file.Skip<uint32_t>(); // Skip _peflag
file.WriteLE<int32_t>(player.lightId);
file.WriteLE<int32_t>(1); // _pvid
@ -1607,7 +1607,7 @@ void SaveObject(SaveHelper &file, const Object &object)
file.WriteLE<uint32_t>(object._oAnimLen);
file.WriteLE<uint32_t>(object._oAnimFrame);
file.WriteLE<int32_t>(object._oAnimWidth);
file.WriteLE<int32_t>(CalculateWidth2(static_cast<int>(object._oAnimWidth))); // Write _oAnimWidth2 for vanilla compatibility
file.WriteLE<int32_t>(CalculateSpriteTileCenterX(static_cast<int>(object._oAnimWidth))); // Write _oAnimWidth2 for vanilla compatibility
file.WriteLE<uint32_t>(object._oDelFlag ? 1 : 0);
file.WriteLE<int8_t>(object._oBreak);
file.Skip(3); // Alignment

2
Source/lua/modules/dev/quests.cpp

@ -6,7 +6,7 @@
#include <sol/sol.hpp>
#include "engine.h"
#include "engine/render/primitive_render.hpp"
#include "lua/metadoc.hpp"
#include "quests.h"
#include "utils/is_of.hpp"

2
Source/minitext.cpp

@ -11,11 +11,11 @@
#include "DiabloUI/ui_flags.hpp"
#include "control.h"
#include "engine.h"
#include "engine/clx_sprite.hpp"
#include "engine/dx.h"
#include "engine/load_cel.hpp"
#include "engine/render/clx_render.hpp"
#include "engine/render/primitive_render.hpp"
#include "engine/render/text_render.hpp"
#include "playerdat.hpp"
#include "textdat.h"

2
Source/minitext.h

@ -5,7 +5,7 @@
*/
#pragma once
#include "engine.h"
#include "engine/surface.hpp"
#include "textdat.h"
namespace devilution {

4
Source/missiles.cpp

@ -21,8 +21,10 @@
#include "engine/load_file.hpp"
#include "engine/points_in_rectangle_range.hpp"
#include "engine/random.hpp"
#include "engine/render/primitive_render.hpp"
#include "init.h"
#include "inv.h"
#include "levels/dun_tile.hpp"
#include "levels/trigs.h"
#include "lighting.h"
#include "monster.h"
@ -2166,7 +2168,7 @@ void InitMissileAnimationFromMonster(Missile &mis, Direction midir, const Monste
mis._miAnimDelay = anim.rate;
mis._miAnimLen = anim.frames;
mis._miAnimWidth = width;
mis._miAnimWidth2 = CalculateWidth2(width);
mis._miAnimWidth2 = CalculateSpriteTileCenterX(width);
mis._miAnimAdd = 1;
mis.var1 = 0;
mis.var2 = 0;

2
Source/missiles.h

@ -9,7 +9,7 @@
#include <list>
#include <optional>
#include "engine.h"
#include "engine/displacement.hpp"
#include "engine/point.hpp"
#include "engine/world_tile.hpp"
#include "misdat.h"

4
Source/monster.h

@ -15,7 +15,6 @@
#include <expected.hpp>
#include <function_ref.hpp>
#include "engine.h"
#include "engine/actor_position.hpp"
#include "engine/animationinfo.h"
#include "engine/clx_sprite.hpp"
@ -23,6 +22,7 @@
#include "engine/sound.h"
#include "engine/world_tile.hpp"
#include "init.h"
#include "levels/dun_tile.hpp"
#include "misdat.h"
#include "monstdat.h"
#include "spelldat.h"
@ -468,7 +468,7 @@ struct Monster { // note: missing field _mAFNum
[[nodiscard]] Displacement getRenderingOffset(const ClxSprite sprite) const
{
Displacement offset = { -CalculateWidth2(sprite.width()), 0 };
Displacement offset = { -CalculateSpriteTileCenterX(sprite.width()), 0 };
if (isWalking())
offset += GetOffsetForWalking(animInfo, direction);
return offset;

1
Source/mpq/mpq_writer.cpp

@ -10,7 +10,6 @@
#include "appfat.h"
#include "encrypt.h"
#include "engine.h"
#include "utils/endian_read.hpp"
#include "utils/file_util.h"
#include "utils/language.h"

3
Source/objects.h

@ -17,6 +17,7 @@
#include "engine/rectangle.hpp"
#include "engine/world_tile.hpp"
#include "itemdat.h"
#include "levels/dun_tile.hpp"
#include "monster.h"
#include "objdat.h"
#include "textdat.h"
@ -270,7 +271,7 @@ struct Object {
}
[[nodiscard]] Displacement getRenderingOffset(const ClxSprite sprite, Point tilePosition) const
{
Displacement offset = Displacement { -CalculateWidth2(sprite.width()), 0 };
Displacement offset = Displacement { -CalculateSpriteTileCenterX(sprite.width()), 0 };
if (position != tilePosition) {
// drawing a large or offset object, calculate the correct position for the center of the sprite
Displacement worldOffset = position - tilePosition;

2
Source/panels/console.cpp

@ -14,12 +14,12 @@
#include "DiabloUI/text_input.hpp"
#include "control.h"
#include "engine.h"
#include "engine/assets.hpp"
#include "engine/displacement.hpp"
#include "engine/dx.h"
#include "engine/palette.h"
#include "engine/rectangle.hpp"
#include "engine/render/primitive_render.hpp"
#include "engine/render/text_render.hpp"
#include "engine/size.hpp"
#include "engine/surface.hpp"

2
Source/panels/spell_icons.cpp

@ -3,11 +3,11 @@
#include <cstdint>
#include <optional>
#include "engine.h"
#include "engine/load_cel.hpp"
#include "engine/load_clx.hpp"
#include "engine/palette.h"
#include "engine/render/clx_render.hpp"
#include "engine/render/primitive_render.hpp"
#include "init.h"
namespace devilution {

2
Source/panels/spell_list.cpp

@ -6,9 +6,9 @@
#include "control.h"
#include "controls/plrctrls.h"
#include "engine.h"
#include "engine/backbuffer_state.hpp"
#include "engine/palette.h"
#include "engine/render/primitive_render.hpp"
#include "engine/render/text_render.hpp"
#include "inv_iterators.hpp"
#include "options.h"

2
Source/pfile.cpp

@ -14,8 +14,8 @@
#include <fmt/core.h>
#include "codec.h"
#include "engine.h"
#include "engine/load_file.hpp"
#include "engine/render/primitive_render.hpp"
#include "init.h"
#include "loadsave.h"
#include "menu.h"

5
Source/player.h

@ -12,15 +12,16 @@
#include <array>
#include "diablo.h"
#include "engine.h"
#include "engine/actor_position.hpp"
#include "engine/animationinfo.h"
#include "engine/clx_sprite.hpp"
#include "engine/displacement.hpp"
#include "engine/path.h"
#include "engine/point.hpp"
#include "interfac.h"
#include "items.h"
#include "items/validation.h"
#include "levels/dun_tile.hpp"
#include "levels/gendung.h"
#include "multi.h"
#include "playerdat.hpp"
@ -783,7 +784,7 @@ public:
}
[[nodiscard]] Displacement getRenderingOffset(const ClxSprite sprite) const
{
Displacement offset = { -CalculateWidth2(sprite.width()), 0 };
Displacement offset = { -CalculateSpriteTileCenterX(sprite.width()), 0 };
if (isWalking())
offset += GetOffsetForWalking(AnimInfo, _pdir);
return offset;

1
Source/playerdat.hpp

@ -5,6 +5,7 @@
*/
#pragma once
#include <array>
#include <cstdint>
#include "effects.h"

1
Source/plrmsg.cpp

@ -11,6 +11,7 @@
#include <fmt/format.h>
#include "control.h"
#include "engine/render/primitive_render.hpp"
#include "engine/render/text_render.hpp"
#include "inv.h"
#include "qol/chatlog.h"

2
Source/plrmsg.h

@ -12,7 +12,7 @@
#include <SDL.h>
#include "DiabloUI/ui_flags.hpp"
#include "engine.h"
#include "engine/surface.hpp"
#include "player.h"
namespace devilution {

3
Source/qol/chatlog.h

@ -5,7 +5,8 @@
*/
#pragma once
#include "engine.h"
#include "DiabloUI/ui_flags.hpp"
#include "engine/surface.hpp"
#include "player.h"
namespace devilution {

1
Source/qol/itemlabels.cpp

@ -13,6 +13,7 @@
#include "cursor.h"
#include "engine/point.hpp"
#include "engine/render/clx_render.hpp"
#include "engine/render/primitive_render.hpp"
#include "gmenu.h"
#include "inv.h"
#include "options.h"

3
Source/qol/itemlabels.h

@ -5,7 +5,8 @@
*/
#pragma once
#include "engine.h"
#include "engine/point.hpp"
#include "engine/surface.hpp"
namespace devilution {

1
Source/qol/monhealthbar.cpp

@ -14,6 +14,7 @@
#include "engine/clx_sprite.hpp"
#include "engine/load_clx.hpp"
#include "engine/render/clx_render.hpp"
#include "engine/render/primitive_render.hpp"
#include "options.h"
#include "utils/language.h"
#include "utils/str_cat.hpp"

1
Source/qol/xpbar.cpp

@ -15,6 +15,7 @@
#include "engine/load_clx.hpp"
#include "engine/point.hpp"
#include "engine/render/clx_render.hpp"
#include "engine/render/primitive_render.hpp"
#include "options.h"
#include "playerdat.hpp"
#include "utils/format_int.hpp"

2
Source/quests.h

@ -7,9 +7,9 @@
#include <cstdint>
#include "engine.h"
#include "engine/clx_sprite.hpp"
#include "engine/point.hpp"
#include "engine/surface.hpp"
#include "levels/gendung.h"
#include "monster.h"
#include "objdat.h"

1
Source/stores.cpp

@ -17,6 +17,7 @@
#include "engine/load_cel.hpp"
#include "engine/random.hpp"
#include "engine/render/clx_render.hpp"
#include "engine/render/primitive_render.hpp"
#include "engine/render/text_render.hpp"
#include "engine/trn.hpp"
#include "init.h"

2
Source/stores.h

@ -10,8 +10,8 @@
#include "DiabloUI/ui_flags.hpp"
#include "control.h"
#include "engine.h"
#include "engine/clx_sprite.hpp"
#include "engine/surface.hpp"
#include "utils/attributes.h"
namespace devilution {

4
Source/towners.h

@ -11,7 +11,9 @@
#include <span>
#include <string_view>
#include "engine/clx_sprite.hpp"
#include "items.h"
#include "levels/dun_tile.hpp"
#include "player.h"
#include "quests.h"
@ -67,7 +69,7 @@ struct Towner {
}
[[nodiscard]] Displacement getRenderingOffset() const
{
return { -CalculateWidth2(_tAnimWidth), 0 };
return { -CalculateSpriteTileCenterX(_tAnimWidth), 0 };
}
};

2
test/dead_test.cpp

@ -1,7 +1,7 @@
#include <gtest/gtest.h>
#include "dead.h"
#include "engine.h"
#include "engine/render/primitive_render.hpp"
#include "levels/gendung.h"
using namespace devilution;

Loading…
Cancel
Save