Browse Source

Fix size of sgRecvBuf

pull/7987/head
staphen 11 months ago committed by Stephen C. Wills
parent
commit
f15548213d
  1. 27
      Source/msg.cpp

27
Source/msg.cpp

@ -265,10 +265,19 @@ uint32_t sgdwRecvOffset;
int sgnCurrMegaPlayer;
ankerl::unordered_dense::map<uint8_t, DLevel> DeltaLevels;
uint8_t sbLastCmd;
/**
* @brief buffer used to receive level deltas, size is the worst expected case assuming every object on a level was touched
*/
std::byte sgRecvBuf[1U + sizeof(DLevel::item) + sizeof(uint8_t) + (sizeof(WorldTilePosition) + sizeof(_cmd_id)) * MAXOBJECTS + sizeof(DLevel::monster)];
std::byte sgRecvBuf[1U /* marker byte, always 0 */
+ sizeof(uint8_t) /* level id */
+ sizeof(DLevel::item) /* items spawned during dungeon generation which have been picked up, and items dropped by a player during a game */
+ sizeof(uint8_t) /* count of object interactions which caused a state change since dungeon generation */
+ (sizeof(WorldTilePosition) + sizeof(_cmd_id)) * MAXOBJECTS /* location/action pairs for the object interactions */
+ sizeof(DLevel::monster) /* latest monster state */
+ sizeof(uint16_t) /* spawned monster count */
+ (sizeof(uint16_t) + sizeof(DSpawnedMonster)) * MaxMonsters]; /* spawned monsters */
_cmd_id sgbRecvCmd;
ankerl::unordered_dense::map<uint8_t, LocalLevel> LocalLevels;
DJunk sgJunk;
@ -2471,14 +2480,14 @@ void run_delta_info()
void DeltaExportData(uint8_t pnum)
{
for (const auto &[levelNum, deltaLevel] : DeltaLevels) {
const size_t bufferSize = 1U /* marker byte, always 0 */
+ sizeof(uint8_t) /* level id */
+ sizeof(deltaLevel.item) /* items spawned during dungeon generation which have been picked up, and items dropped by a player during a game */
+ sizeof(uint8_t) /* count of object interactions which caused a state change since dungeon generation */
+ (sizeof(WorldTilePosition) + sizeof(DObjectStr)) * deltaLevel.object.size() /* location/action pairs for the object interactions */
+ sizeof(deltaLevel.monster) /* latest monster state */
+ sizeof(uint16_t) /* spanwned monster count */
+ (sizeof(uint16_t) + sizeof(DSpawnedMonster)) * MaxMonsters; /* spanwned monsters */
const size_t bufferSize = 1U /* marker byte, always 0 */
+ sizeof(uint8_t) /* level id */
+ sizeof(deltaLevel.item) /* items spawned during dungeon generation which have been picked up, and items dropped by a player during a game */
+ sizeof(uint8_t) /* count of object interactions which caused a state change since dungeon generation */
+ (sizeof(WorldTilePosition) + sizeof(DObjectStr)) * deltaLevel.object.size() /* location/action pairs for the object interactions */
+ sizeof(deltaLevel.monster) /* latest monster state */
+ sizeof(uint16_t) /* spawned monster count */
+ (sizeof(uint16_t) + sizeof(DSpawnedMonster)) * deltaLevel.spawnedMonsters.size(); /* spawned monsters */
std::unique_ptr<std::byte[]> dst { new std::byte[bufferSize] };
std::byte *dstEnd = &dst.get()[1];

Loading…
Cancel
Save