MCPcopy Create free account
hub / github.com/diasurgical/DevilutionX / SaveLevel

Function SaveLevel

Source/loadsave.cpp:1782–1859  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1780}
1781
1782void SaveLevel(SaveWriter &saveWriter, LevelConversionData *levelConversionData)
1783{
1784 Player &myPlayer = *MyPlayer;
1785
1786 DoUnVision(myPlayer.position.tile, myPlayer._pLightRad); // fix for vision staying on the level
1787
1788 if (leveltype == DTYPE_TOWN)
1789 glSeedTbl[0] = AdvanceRndSeed();
1790
1791 char szName[MaxMpqPathSize];
1792 GetTempLevelNames(szName);
1793 SaveHelper file(saveWriter, szName, 256 * 1024);
1794
1795 if (leveltype != DTYPE_TOWN) {
1796 for (int j = 0; j < MAXDUNY; j++) {
1797 for (int i = 0; i < MAXDUNX; i++) // NOLINT(modernize-loop-convert)
1798 file.WriteLE<int8_t>(dCorpse[i][j]);
1799 }
1800 }
1801
1802 file.WriteBE<int32_t>(ActiveMonsterCount);
1803 file.WriteBE<int32_t>(ActiveItemCount);
1804 file.WriteBE<int32_t>(ActiveObjectCount);
1805
1806 if (leveltype != DTYPE_TOWN) {
1807 for (int monsterId : ActiveMonsters)
1808 file.WriteBE<int32_t>(monsterId);
1809 for (size_t i = 0; i < ActiveMonsterCount; i++) {
1810 MonsterConversionData *monsterConversionData = nullptr;
1811 if (levelConversionData != nullptr)
1812 monsterConversionData = &levelConversionData->monsterConversionData[ActiveMonsters[i]];
1813 SaveMonster(&file, Monsters[ActiveMonsters[i]], monsterConversionData);
1814 }
1815 for (int objectId : ActiveObjects)
1816 file.WriteLE<int8_t>(objectId);
1817 for (int objectId : AvailableObjects)
1818 file.WriteLE<int8_t>(objectId);
1819 for (int i = 0; i < ActiveObjectCount; i++) {
1820 SaveObject(file, Objects[ActiveObjects[i]]);
1821 }
1822 }
1823
1824 auto itemIndexes = SaveDroppedItems(file);
1825
1826 for (int j = 0; j < MAXDUNY; j++) {
1827 for (int i = 0; i < MAXDUNX; i++) // NOLINT(modernize-loop-convert)
1828 file.WriteLE<uint8_t>(static_cast<uint8_t>(dFlags[i][j] & DungeonFlag::SavedFlags));
1829 }
1830 SaveDroppedItemLocations(file, itemIndexes);
1831
1832 if (leveltype != DTYPE_TOWN) {
1833 for (int j = 0; j < MAXDUNY; j++) {
1834 for (int i = 0; i < MAXDUNX; i++) // NOLINT(modernize-loop-convert)
1835 file.WriteBE<int32_t>(dMonster[i][j]);
1836 }
1837 for (int j = 0; j < MAXDUNY; j++) {
1838 for (int i = 0; i < MAXDUNX; i++) // NOLINT(modernize-loop-convert)
1839 file.WriteLE<int8_t>(dObject[i][j]);

Callers 2

ConvertLevelsFunction · 0.85
pfile_save_levelFunction · 0.85

Calls 7

DoUnVisionFunction · 0.85
AdvanceRndSeedFunction · 0.85
GetTempLevelNamesFunction · 0.85
SaveMonsterFunction · 0.85
SaveObjectFunction · 0.85
SaveDroppedItemsFunction · 0.85
SaveDroppedItemLocationsFunction · 0.85

Tested by

no test coverage detected