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

Function DrawDungeon

Source/engine/render/scrollrt.cpp:792–870  ·  view source on GitHub ↗

* @brief Render object sprites * @param out Target buffer * @param tilePosition dPiece coordinates * @param targetBufferPosition Target buffer coordinates */

Source from the content-addressed store, hash-verified

790 * @param targetBufferPosition Target buffer coordinates
791 */
792void DrawDungeon(const Surface &out, Point tilePosition, Point targetBufferPosition)
793{
794 assert(InDungeonBounds(tilePosition));
795
796 if (dRendered.test(tilePosition.x, tilePosition.y))
797 return;
798 dRendered.set(tilePosition.x, tilePosition.y);
799
800 LightTableIndex = dLight[tilePosition.x][tilePosition.y];
801
802 DrawCell(out, tilePosition, targetBufferPosition);
803
804 int8_t bDead = dCorpse[tilePosition.x][tilePosition.y];
805 int8_t bMap = dTransVal[tilePosition.x][tilePosition.y];
806
807#ifdef _DEBUG
808 if (DebugVision && IsTileLit(tilePosition)) {
809 ClxDraw(out, targetBufferPosition, (*pSquareCel)[0]);
810 }
811#endif
812
813 if (MissilePreFlag) {
814 DrawMissile(out, tilePosition, targetBufferPosition, true, LightTableIndex);
815 }
816
817 if (LightTableIndex < LightsMax && bDead != 0) {
818 Corpse &corpse = Corpses[(bDead & 0x1F) - 1];
819 const Point position { targetBufferPosition.x - CalculateWidth2(corpse.width), targetBufferPosition.y };
820 const ClxSprite sprite = corpse.spritesForDirection(static_cast<Direction>((bDead >> 5) & 7))[corpse.frame];
821 if (corpse.translationPaletteIndex != 0) {
822 const uint8_t *trn = Monsters[corpse.translationPaletteIndex - 1].uniqueMonsterTRN.get();
823 ClxDrawTRN(out, position, sprite, trn);
824 } else {
825 ClxDrawLight(out, position, sprite, LightTableIndex);
826 }
827 }
828 DrawObject(out, tilePosition, targetBufferPosition, true);
829 DrawItem(out, tilePosition, targetBufferPosition, true);
830
831 if (TileContainsDeadPlayer(tilePosition)) {
832 DrawDeadPlayer(out, tilePosition, targetBufferPosition);
833 }
834 int8_t playerId = dPlayer[tilePosition.x][tilePosition.y];
835 if (static_cast<size_t>(playerId - 1) < Players.size()) {
836 DrawPlayerHelper(out, Players[playerId - 1], tilePosition, targetBufferPosition);
837 }
838 if (dMonster[tilePosition.x][tilePosition.y] != 0) {
839 DrawMonsterHelper(out, tilePosition, targetBufferPosition);
840 }
841 DrawMissile(out, tilePosition, targetBufferPosition, false, LightTableIndex);
842 DrawObject(out, tilePosition, targetBufferPosition, false);
843 DrawItem(out, tilePosition, targetBufferPosition, false);
844
845 if (leveltype != DTYPE_TOWN) {
846 char bArch = dSpecial[tilePosition.x][tilePosition.y];
847 if (bArch != 0) {
848 bool transparency = TransList[bMap];
849#ifdef _DEBUG

Callers 1

DrawTileContentFunction · 0.85

Calls 15

InDungeonBoundsFunction · 0.85
DrawCellFunction · 0.85
IsTileLitFunction · 0.85
ClxDrawFunction · 0.85
DrawMissileFunction · 0.85
CalculateWidth2Function · 0.85
ClxDrawTRNFunction · 0.85
ClxDrawLightFunction · 0.85
DrawObjectFunction · 0.85
TileContainsDeadPlayerFunction · 0.85
DrawDeadPlayerFunction · 0.85
DrawPlayerHelperFunction · 0.85

Tested by

no test coverage detected