//HEADER_GOES_HERE #include "../types.h" LightListStruct VisionList[32]; char lightactive[32]; LightListStruct LightList[32]; int numlights; char dung_map_radius[2048]; /* char [16][128] */ int dovision; // weak int numvision; char lightmax; // weak int dolighting; // weak char dung_map_rgba[16384]; /* int [64][64] short [64][128] char [64][256] */ int visionid; char *pLightTbl; /* todo: struct? */ BOOL lightflag; char CrawlTable[2749] = { 1, 0, 0, 4, 0, 1, 0, -1, -1, 0, 1, 0, 16, 0, 2, 0, -2, -1, 2, 1, 2, -1, -2, 1, -2, -1, 1, 1, 1, -1, -1, 1, -1, -2, 1, 2, 1, -2, -1, 2, -1, -2, 0, 2, 0, 24, 0, 3, 0, -3, -1, 3, 1, 3, -1, -3, 1, -3, -2, 3, 2, 3, -2, -3, 2, -3, -2, 2, 2, 2, -2, -2, 2, -2, -3, 2, 3, 2, -3, -2, 3, -2, -3, 1, 3, 1, -3, -1, 3, -1, -3, 0, 3, 0, 32, 0, 4, 0, -4, -1, 4, 1, 4, -1, -4, 1, -4, -2, 4, 2, 4, -2, -4, 2, -4, -3, 4, 3, 4, -3, -4, 3, -4, -3, 3, 3, 3, -3, -3, 3, -3, -4, 3, 4, 3, -4, -3, 4, -3, -4, 2, 4, 2, -4, -2, 4, -2, -4, 1, 4, 1, -4, -1, 4, -1, -4, 0, 4, 0, 40, 0, 5, 0, -5, -1, 5, 1, 5, -1, -5, 1, -5, -2, 5, 2, 5, -2, -5, 2, -5, -3, 5, 3, 5, -3, -5, 3, -5, -4, 5, 4, 5, -4, -5, 4, -5, -4, 4, 4, 4, -4, -4, 4, -4, -5, 4, 5, 4, -5, -4, 5, -4, -5, 3, 5, 3, -5, -3, 5, -3, -5, 2, 5, 2, -5, -2, 5, -2, -5, 1, 5, 1, -5, -1, 5, -1, -5, 0, 5, 0, 48, 0, 6, 0, -6, -1, 6, 1, 6, -1, -6, 1, -6, -2, 6, 2, 6, -2, -6, 2, -6, -3, 6, 3, 6, -3, -6, 3, -6, -4, 6, 4, 6, -4, -6, 4, -6, -5, 6, 5, 6, -5, -6, 5, -6, -5, 5, 5, 5, -5, -5, 5, -5, -6, 5, 6, 5, -6, -5, 6, -5, -6, 4, 6, 4, -6, -4, 6, -4, -6, 3, 6, 3, -6, -3, 6, -3, -6, 2, 6, 2, -6, -2, 6, -2, -6, 1, 6, 1, -6, -1, 6, -1, -6, 0, 6, 0, 56, 0, 7, 0, -7, -1, 7, 1, 7, -1, -7, 1, -7, -2, 7, 2, 7, -2, -7, 2, -7, -3, 7, 3, 7, -3, -7, 3, -7, -4, 7, 4, 7, -4, -7, 4, -7, -5, 7, 5, 7, -5, -7, 5, -7, -6, 7, 6, 7, -6, -7, 6, -7, -6, 6, 6, 6, -6, -6, 6, -6, -7, 6, 7, 6, -7, -6, 7, -6, -7, 5, 7, 5, -7, -5, 7, -5, -7, 4, 7, 4, -7, -4, 7, -4, -7, 3, 7, 3, -7, -3, 7, -3, -7, 2, 7, 2, -7, -2, 7, -2, -7, 1, 7, 1, -7, -1, 7, -1, -7, 0, 7, 0, 64, 0, 8, 0, -8, -1, 8, 1, 8, -1, -8, 1, -8, -2, 8, 2, 8, -2, -8, 2, -8, -3, 8, 3, 8, -3, -8, 3, -8, -4, 8, 4, 8, -4, -8, 4, -8, -5, 8, 5, 8, -5, -8, 5, -8, -6, 8, 6, 8, -6, -8, 6, -8, -7, 8, 7, 8, -7, -8, 7, -8, -7, 7, 7, 7, -7, -7, 7, -7, -8, 7, 8, 7, -8, -7, 8, -7, -8, 6, 8, 6, -8, -6, 8, -6, -8, 5, 8, 5, -8, -5, 8, -5, -8, 4, 8, 4, -8, -4, 8, -4, -8, 3, 8, 3, -8, -3, 8, -3, -8, 2, 8, 2, -8, -2, 8, -2, -8, 1, 8, 1, -8, -1, 8, -1, -8, 0, 8, 0, 72, 0, 9, 0, -9, -1, 9, 1, 9, -1, -9, 1, -9, -2, 9, 2, 9, -2, -9, 2, -9, -3, 9, 3, 9, -3, -9, 3, -9, -4, 9, 4, 9, -4, -9, 4, -9, -5, 9, 5, 9, -5, -9, 5, -9, -6, 9, 6, 9, -6, -9, 6, -9, -7, 9, 7, 9, -7, -9, 7, -9, -8, 9, 8, 9, -8, -9, 8, -9, -8, 8, 8, 8, -8, -8, 8, -8, -9, 8, 9, 8, -9, -8, 9, -8, -9, 7, 9, 7, -9, -7, 9, -7, -9, 6, 9, 6, -9, -6, 9, -6, -9, 5, 9, 5, -9, -5, 9, -5, -9, 4, 9, 4, -9, -4, 9, -4, -9, 3, 9, 3, -9, -3, 9, -3, -9, 2, 9, 2, -9, -2, 9, -2, -9, 1, 9, 1, -9, -1, 9, -1, -9, 0, 9, 0, 80, 0, 10, 0, -10, -1, 10, 1, 10, -1, -10, 1, -10, -2, 10, 2, 10, -2, -10, 2, -10, -3, 10, 3, 10, -3, -10, 3, -10, -4, 10, 4, 10, -4, -10, 4, -10, -5, 10, 5, 10, -5, -10, 5, -10, -6, 10, 6, 10, -6, -10, 6, -10, -7, 10, 7, 10, -7, -10, 7, -10, -8, 10, 8, 10, -8, -10, 8, -10, -9, 10, 9, 10, -9, -10, 9, -10, -9, 9, 9, 9, -9, -9, 9, -9, -10, 9, 10, 9, -10, -9, 10, -9, -10, 8, 10, 8, -10, -8, 10, -8, -10, 7, 10, 7, -10, -7, 10, -7, -10, 6, 10, 6, -10, -6, 10, -6, -10, 5, 10, 5, -10, -5, 10, -5, -10, 4, 10, 4, -10, -4, 10, -4, -10, 3, 10, 3, -10, -3, 10, -3, -10, 2, 10, 2, -10, -2, 10, -2, -10, 1, 10, 1, -10, -1, 10, -1, -10, 0, 10, 0, 88, 0, 11, 0, -11, -1, 11, 1, 11, -1, -11, 1, -11, -2, 11, 2, 11, -2, -11, 2, -11, -3, 11, 3, 11, -3, -11, 3, -11, -4, 11, 4, 11, -4, -11, 4, -11, -5, 11, 5, 11, -5, -11, 5, -11, -6, 11, 6, 11, -6, -11, 6, -11, -7, 11, 7, 11, -7, -11, 7, -11, -8, 11, 8, 11, -8, -11, 8, -11, -9, 11, 9, 11, -9, -11, 9, -11, -10, 11, 10, 11, -10, -11, 10, -11, -10, 10, 10, 10, -10, -10, 10, -10, -11, 10, 11, 10, -11, -10, 11, -10, -11, 9, 11, 9, -11, -9, 11, -9, -11, 8, 11, 8, -11, -8, 11, -8, -11, 7, 11, 7, -11, -7, 11, -7, -11, 6, 11, 6, -11, -6, 11, -6, -11, 5, 11, 5, -11, -5, 11, -5, -11, 4, 11, 4, -11, -4, 11, -4, -11, 3, 11, 3, -11, -3, 11, -3, -11, 2, 11, 2, -11, -2, 11, -2, -11, 1, 11, 1, -11, -1, 11, -1, -11, 0, 11, 0, 96, 0, 12, 0, -12, -1, 12, 1, 12, -1, -12, 1, -12, -2, 12, 2, 12, -2, -12, 2, -12, -3, 12, 3, 12, -3, -12, 3, -12, -4, 12, 4, 12, -4, -12, 4, -12, -5, 12, 5, 12, -5, -12, 5, -12, -6, 12, 6, 12, -6, -12, 6, -12, -7, 12, 7, 12, -7, -12, 7, -12, -8, 12, 8, 12, -8, -12, 8, -12, -9, 12, 9, 12, -9, -12, 9, -12, -10, 12, 10, 12, -10, -12, 10, -12, -11, 12, 11, 12, -11, -12, 11, -12, -11, 11, 11, 11, -11, -11, 11, -11, -12, 11, 12, 11, -12, -11, 12, -11, -12, 10, 12, 10, -12, -10, 12, -10, -12, 9, 12, 9, -12, -9, 12, -9, -12, 8, 12, 8, -12, -8, 12, -8, -12, 7, 12, 7, -12, -7, 12, -7, -12, 6, 12, 6, -12, -6, 12, -6, -12, 5, 12, 5, -12, -5, 12, -5, -12, 4, 12, 4, -12, -4, 12, -4, -12, 3, 12, 3, -12, -3, 12, -3, -12, 2, 12, 2, -12, -2, 12, -2, -12, 1, 12, 1, -12, -1, 12, -1, -12, 0, 12, 0, 104, 0, 13, 0, -13, -1, 13, 1, 13, -1, -13, 1, -13, -2, 13, 2, 13, -2, -13, 2, -13, -3, 13, 3, 13, -3, -13, 3, -13, -4, 13, 4, 13, -4, -13, 4, -13, -5, 13, 5, 13, -5, -13, 5, -13, -6, 13, 6, 13, -6, -13, 6, -13, -7, 13, 7, 13, -7, -13, 7, -13, -8, 13, 8, 13, -8, -13, 8, -13, -9, 13, 9, 13, -9, -13, 9, -13, -10, 13, 10, 13, -10, -13, 10, -13, -11, 13, 11, 13, -11, -13, 11, -13, -12, 13, 12, 13, -12, -13, 12, -13, -12, 12, 12, 12, -12, -12, 12, -12, -13, 12, 13, 12, -13, -12, 13, -12, -13, 11, 13, 11, -13, -11, 13, -11, -13, 10, 13, 10, -13, -10, 13, -10, -13, 9, 13, 9, -13, -9, 13, -9, -13, 8, 13, 8, -13, -8, 13, -8, -13, 7, 13, 7, -13, -7, 13, -7, -13, 6, 13, 6, -13, -6, 13, -6, -13, 5, 13, 5, -13, -5, 13, -5, -13, 4, 13, 4, -13, -4, 13, -4, -13, 3, 13, 3, -13, -3, 13, -3, -13, 2, 13, 2, -13, -2, 13, -2, -13, 1, 13, 1, -13, -1, 13, -1, -13, 0, 13, 0, 112, 0, 14, 0, -14, -1, 14, 1, 14, -1, -14, 1, -14, -2, 14, 2, 14, -2, -14, 2, -14, -3, 14, 3, 14, -3, -14, 3, -14, -4, 14, 4, 14, -4, -14, 4, -14, -5, 14, 5, 14, -5, -14, 5, -14, -6, 14, 6, 14, -6, -14, 6, -14, -7, 14, 7, 14, -7, -14, 7, -14, -8, 14, 8, 14, -8, -14, 8, -14, -9, 14, 9, 14, -9, -14, 9, -14, -10, 14, 10, 14, -10, -14, 10, -14, -11, 14, 11, 14, -11, -14, 11, -14, -12, 14, 12, 14, -12, -14, 12, -14, -13, 14, 13, 14, -13, -14, 13, -14, -13, 13, 13, 13, -13, -13, 13, -13, -14, 13, 14, 13, -14, -13, 14, -13, -14, 12, 14, 12, -14, -12, 14, -12, -14, 11, 14, 11, -14, -11, 14, -11, -14, 10, 14, 10, -14, -10, 14, -10, -14, 9, 14, 9, -14, -9, 14, -9, -14, 8, 14, 8, -14, -8, 14, -8, -14, 7, 14, 7, -14, -7, 14, -7, -14, 6, 14, 6, -14, -6, 14, -6, -14, 5, 14, 5, -14, -5, 14, -5, -14, 4, 14, 4, -14, -4, 14, -4, -14, 3, 14, 3, -14, -3, 14, -3, -14, 2, 14, 2, -14, -2, 14, -2, -14, 1, 14, 1, -14, -1, 14, -1, -14, 0, 14, 0, 120, 0, 15, 0, -15, -1, 15, 1, 15, -1, -15, 1, -15, -2, 15, 2, 15, -2, -15, 2, -15, -3, 15, 3, 15, -3, -15, 3, -15, -4, 15, 4, 15, -4, -15, 4, -15, -5, 15, 5, 15, -5, -15, 5, -15, -6, 15, 6, 15, -6, -15, 6, -15, -7, 15, 7, 15, -7, -15, 7, -15, -8, 15, 8, 15, -8, -15, 8, -15, -9, 15, 9, 15, -9, -15, 9, -15, -10, 15, 10, 15, -10, -15, 10, -15, -11, 15, 11, 15, -11, -15, 11, -15, -12, 15, 12, 15, -12, -15, 12, -15, -13, 15, 13, 15, -13, -15, 13, -15, -14, 15, 14, 15, -14, -15, 14, -15, -14, 14, 14, 14, -14, -14, 14, -14, -15, 14, 15, 14, -15, -14, 15, -14, -15, 13, 15, 13, -15, -13, 15, -13, -15, 12, 15, 12, -15, -12, 15, -12, -15, 11, 15, 11, -15, -11, 15, -11, -15, 10, 15, 10, -15, -10, 15, -10, -15, 9, 15, 9, -15, -9, 15, -9, -15, 8, 15, 8, -15, -8, 15, -8, -15, 7, 15, 7, -15, -7, 15, -7, -15, 6, 15, 6, -15, -6, 15, -6, -15, 5, 15, 5, -15, -5, 15, -5, -15, 4, 15, 4, -15, -4, 15, -4, -15, 3, 15, 3, -15, -3, 15, -3, -15, 2, 15, 2, -15, -2, 15, -2, -15, 1, 15, 1, -15, -1, 15, -1, -15, 0, 15, 0, (char)128, 0, 16, 0, -16, -1, 16, 1, 16, -1, -16, 1, -16, -2, 16, 2, 16, -2, -16, 2, -16, -3, 16, 3, 16, -3, -16, 3, -16, -4, 16, 4, 16, -4, -16, 4, -16, -5, 16, 5, 16, -5, -16, 5, -16, -6, 16, 6, 16, -6, -16, 6, -16, -7, 16, 7, 16, -7, -16, 7, -16, -8, 16, 8, 16, -8, -16, 8, -16, -9, 16, 9, 16, -9, -16, 9, -16, -10, 16, 10, 16, -10, -16, 10, -16, -11, 16, 11, 16, -11, -16, 11, -16, -12, 16, 12, 16, -12, -16, 12, -16, -13, 16, 13, 16, -13, -16, 13, -16, -14, 16, 14, 16, -14, -16, 14, -16, -15, 16, 15, 16, -15, -16, 15, -16, -15, 15, 15, 15, -15, -15, 15, -15, -16, 15, 16, 15, -16, -15, 16, -15, -16, 14, 16, 14, -16, -14, 16, -14, -16, 13, 16, 13, -16, -13, 16, -13, -16, 12, 16, 12, -16, -12, 16, -12, -16, 11, 16, 11, -16, -11, 16, -11, -16, 10, 16, 10, -16, -10, 16, -10, -16, 9, 16, 9, -16, -9, 16, -9, -16, 8, 16, 8, -16, -8, 16, -8, -16, 7, 16, 7, -16, -7, 16, -7, -16, 6, 16, 6, -16, -6, 16, -6, -16, 5, 16, 5, -16, -5, 16, -5, -16, 4, 16, 4, -16, -4, 16, -4, -16, 3, 16, 3, -16, -3, 16, -3, -16, 2, 16, 2, -16, -2, 16, -2, -16, 1, 16, 1, -16, -1, 16, -1, -16, 0, 16, 0, (char)136, 0, 17, 0, -17, -1, 17, 1, 17, -1, -17, 1, -17, -2, 17, 2, 17, -2, -17, 2, -17, -3, 17, 3, 17, -3, -17, 3, -17, -4, 17, 4, 17, -4, -17, 4, -17, -5, 17, 5, 17, -5, -17, 5, -17, -6, 17, 6, 17, -6, -17, 6, -17, -7, 17, 7, 17, -7, -17, 7, -17, -8, 17, 8, 17, -8, -17, 8, -17, -9, 17, 9, 17, -9, -17, 9, -17, -10, 17, 10, 17, -10, -17, 10, -17, -11, 17, 11, 17, -11, -17, 11, -17, -12, 17, 12, 17, -12, -17, 12, -17, -13, 17, 13, 17, -13, -17, 13, -17, -14, 17, 14, 17, -14, -17, 14, -17, -15, 17, 15, 17, -15, -17, 15, -17, -16, 17, 16, 17, -16, -17, 16, -17, -16, 16, 16, 16, -16, -16, 16, -16, -17, 16, 17, 16, -17, -16, 17, -16, -17, 15, 17, 15, -17, -15, 17, -15, -17, 14, 17, 14, -17, -14, 17, -14, -17, 13, 17, 13, -17, -13, 17, -13, -17, 12, 17, 12, -17, -12, 17, -12, -17, 11, 17, 11, -17, -11, 17, -11, -17, 10, 17, 10, -17, -10, 17, -10, -17, 9, 17, 9, -17, -9, 17, -9, -17, 8, 17, 8, -17, -8, 17, -8, -17, 7, 17, 7, -17, -7, 17, -7, -17, 6, 17, 6, -17, -6, 17, -6, -17, 5, 17, 5, -17, -5, 17, -5, -17, 4, 17, 4, -17, -4, 17, -4, -17, 3, 17, 3, -17, -3, 17, -3, -17, 2, 17, 2, -17, -2, 17, -2, -17, 1, 17, 1, -17, -1, 17, -1, -17, 0, 17, 0, (char)144, 0, 18, 0, -18, -1, 18, 1, 18, -1, -18, 1, -18, -2, 18, 2, 18, -2, -18, 2, -18, -3, 18, 3, 18, -3, -18, 3, -18, -4, 18, 4, 18, -4, -18, 4, -18, -5, 18, 5, 18, -5, -18, 5, -18, -6, 18, 6, 18, -6, -18, 6, -18, -7, 18, 7, 18, -7, -18, 7, -18, -8, 18, 8, 18, -8, -18, 8, -18, -9, 18, 9, 18, -9, -18, 9, -18, -10, 18, 10, 18, -10, -18, 10, -18, -11, 18, 11, 18, -11, -18, 11, -18, -12, 18, 12, 18, -12, -18, 12, -18, -13, 18, 13, 18, -13, -18, 13, -18, -14, 18, 14, 18, -14, -18, 14, -18, -15, 18, 15, 18, -15, -18, 15, -18, -16, 18, 16, 18, -16, -18, 16, -18, -17, 18, 17, 18, -17, -18, 17, -18, -17, 17, 17, 17, -17, -17, 17, -17, -18, 17, 18, 17, -18, -17, 18, -17, -18, 16, 18, 16, -18, -16, 18, -16, -18, 15, 18, 15, -18, -15, 18, -15, -18, 14, 18, 14, -18, -14, 18, -14, -18, 13, 18, 13, -18, -13, 18, -13, -18, 12, 18, 12, -18, -12, 18, -12, -18, 11, 18, 11, -18, -11, 18, -11, -18, 10, 18, 10, -18, -10, 18, -10, -18, 9, 18, 9, -18, -9, 18, -9, -18, 8, 18, 8, -18, -8, 18, -8, -18, 7, 18, 7, -18, -7, 18, -7, -18, 6, 18, 6, -18, -6, 18, -6, -18, 5, 18, 5, -18, -5, 18, -5, -18, 4, 18, 4, -18, -4, 18, -4, -18, 3, 18, 3, -18, -3, 18, -3, -18, 2, 18, 2, -18, -2, 18, -2, -18, 1, 18, 1, -18, -1, 18, -1, -18, 0, 18, 0 }; char *pCrawlTable[19] = /* figure out what this is for */ { CrawlTable, CrawlTable + 3, CrawlTable + 12, CrawlTable + 45, CrawlTable + 94, CrawlTable + 159, CrawlTable + 240, CrawlTable + 337, CrawlTable + 450, CrawlTable + 579, CrawlTable + 724, CrawlTable + 885, CrawlTable + 1062, CrawlTable + 1255, CrawlTable + 1464, CrawlTable + 1689, CrawlTable + 1930, CrawlTable + 2187, CrawlTable + 2460 }; unsigned char vCrawlTable[23][30] = { { 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 12, 0, 13, 0, 14, 0, 15, 0 }, { 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 1, 9, 1, 10, 1, 11, 1, 12, 1, 13, 1, 14, 1, 15, 1 }, { 1, 0, 2, 0, 3, 0, 4, 1, 5, 1, 6, 1, 7, 1, 8, 1, 9, 1, 10, 1, 11, 1, 12, 2, 13, 2, 14, 2, 15, 2 }, { 1, 0, 2, 0, 3, 1, 4, 1, 5, 1, 6, 1, 7, 1, 8, 2, 9, 2, 10, 2, 11, 2, 12, 2, 13, 3, 14, 3, 15, 3 }, { 1, 0, 2, 1, 3, 1, 4, 1, 5, 1, 6, 2, 7, 2, 8, 2, 9, 3, 10, 3, 11, 3, 12, 3, 13, 4, 14, 4, 0, 0 }, { 1, 0, 2, 1, 3, 1, 4, 1, 5, 2, 6, 2, 7, 3, 8, 3, 9, 3, 10, 4, 11, 4, 12, 4, 13, 5, 14, 5, 0, 0 }, { 1, 0, 2, 1, 3, 1, 4, 2, 5, 2, 6, 3, 7, 3, 8, 3, 9, 4, 10, 4, 11, 5, 12, 5, 13, 6, 14, 6, 0, 0 }, { 1, 1, 2, 1, 3, 2, 4, 2, 5, 3, 6, 3, 7, 4, 8, 4, 9, 5, 10, 5, 11, 6, 12, 6, 13, 7, 0, 0, 0, 0 }, { 1, 1, 2, 1, 3, 2, 4, 2, 5, 3, 6, 4, 7, 4, 8, 5, 9, 6, 10, 6, 11, 7, 12, 7, 12, 8, 13, 8, 0, 0 }, { 1, 1, 2, 2, 3, 2, 4, 3, 5, 4, 6, 5, 7, 5, 8, 6, 9, 7, 10, 7, 10, 8, 11, 8, 12, 9, 0, 0, 0, 0 }, { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 5, 7, 6, 8, 7, 9, 8, 10, 9, 11, 9, 11, 10, 0, 0, 0, 0, 0, 0 }, { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 9, 11, 10, 11, 0, 0, 0, 0, 0, 0 }, { 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5, 6, 5, 7, 6, 8, 7, 9, 7, 10, 8, 10, 8, 11, 9, 12, 0, 0, 0, 0 }, { 1, 1, 1, 2, 2, 3, 2, 4, 3, 5, 4, 6, 4, 7, 5, 8, 6, 9, 6, 10, 7, 11, 7, 12, 8, 12, 8, 13, 0, 0 }, { 1, 1, 1, 2, 2, 3, 2, 4, 3, 5, 3, 6, 4, 7, 4, 8, 5, 9, 5, 10, 6, 11, 6, 12, 7, 13, 0, 0, 0, 0 }, { 0, 1, 1, 2, 1, 3, 2, 4, 2, 5, 3, 6, 3, 7, 3, 8, 4, 9, 4, 10, 5, 11, 5, 12, 6, 13, 6, 14, 0, 0 }, { 0, 1, 1, 2, 1, 3, 1, 4, 2, 5, 2, 6, 3, 7, 3, 8, 3, 9, 4, 10, 4, 11, 4, 12, 5, 13, 5, 14, 0, 0 }, { 0, 1, 1, 2, 1, 3, 1, 4, 1, 5, 2, 6, 2, 7, 2, 8, 3, 9, 3, 10, 3, 11, 3, 12, 4, 13, 4, 14, 0, 0 }, { 0, 1, 0, 2, 1, 3, 1, 4, 1, 5, 1, 6, 1, 7, 2, 8, 2, 9, 2, 10, 2, 11, 2, 12, 3, 13, 3, 14, 3, 15 }, { 0, 1, 0, 2, 0, 3, 1, 4, 1, 5, 1, 6, 1, 7, 1, 8, 1, 9, 1, 10, 1, 11, 2, 12, 2, 13, 2, 14, 2, 15 }, { 0, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 1, 8, 1, 9, 1, 10, 1, 11, 1, 12, 1, 13, 1, 14, 1, 15 }, { 0, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 12, 0, 13, 0, 14, 0, 15 } }; unsigned char byte_49463C[18][18] = /* unused */ { { 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 }, { 0, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 }, { 0, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 }, { 0, 0, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 }, { 0, 0, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 }, { 0, 0, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 }, { 0, 0, 0, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 }, { 0, 0, 0, 1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 }, { 0, 0, 0, 0, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3 }, { 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3 }, { 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3 }, { 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3 }, { 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3 }, { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3 }, { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3 }, { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3 }, { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3 }, { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2 } }; unsigned char RadiusAdj[23] = { 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 4, 3, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0 }; void __fastcall SetLightFX(int *x, int *y, short *s_r, short *s_g, int *s_b, int *d_r, int *d_g, int *d_b) { short *v8; // eax int v9; // edx int *v10; // [esp+Ch] [ebp-4h] short *s_ra; // [esp+18h] [ebp+8h] *d_g = 0; *d_b = 0; v8 = s_r; v10 = y; v9 = *(_DWORD *)s_r; *(_DWORD *)s_r = 7 - *(_DWORD *)s_g; *(_DWORD *)s_g = v9; s_ra = (short *)*s_b; *s_b = 7 - *d_r; *d_r = (int)s_ra; *x = *(_DWORD *)v8 - *s_b; *v10 = *(_DWORD *)s_g - *d_r; if (*x < 0) { *x += 8; *d_g = 1; } if (*v10 < 0) { *v10 += 8; *d_b = 1; } } void __fastcall DoLighting(int nXPos, int nYPos, int nRadius, int Lnum) { int v4; // edi int v5; // ebx int v6; // ecx int v7; // eax int v8; // edx int v9; // esi int v10; // eax char *v11; // edi signed int v12; // ecx int v13; // edx _BYTE *v14; // ecx int v15; // ebx BOOLEAN v16; // sf unsigned char v17; // of int v18; // esi int v19; // ecx char *v20; // edi signed int v21; // eax int v22; // edx _BYTE *v23; // eax int v24; // ebx int v25; // eax int v26; // esi char *v27; // edi signed int v28; // ecx int v29; // edx _BYTE *v30; // ecx int v31; // ebx signed int v32; // ebx int v33; // ecx char *v34; // esi signed int v35; // eax int v36; // edx _BYTE *v37; // eax int v38; // edi short s_r[2]; // [esp+Ch] [ebp-44h] short s_g[2]; // [esp+10h] [ebp-40h] int s_b; // [esp+14h] [ebp-3Ch] int d_r; // [esp+18h] [ebp-38h] int v43; // [esp+1Ch] [ebp-34h] int v44; // [esp+20h] [ebp-30h] int v45; // [esp+24h] [ebp-2Ch] int v46; // [esp+28h] [ebp-28h] int v47; // [esp+2Ch] [ebp-24h] int v48; // [esp+30h] [ebp-20h] int d_g; // [esp+34h] [ebp-1Ch] int d_b; // [esp+38h] [ebp-18h] int v51; // [esp+3Ch] [ebp-14h] int v52; // [esp+40h] [ebp-10h] int y; // [esp+44h] [ebp-Ch] int x; // [esp+48h] [ebp-8h] int v55; // [esp+4Ch] [ebp-4h] int Lnuma; // [esp+5Ch] [ebp+Ch] int Lnumb; // [esp+5Ch] [ebp+Ch] int Lnumc; // [esp+5Ch] [ebp+Ch] int Lnumd; // [esp+5Ch] [ebp+Ch] v4 = nYPos; v5 = nXPos; v6 = 0; v7 = 0; v48 = nYPos; v52 = v5; x = 0; y = 0; s_b = 0; d_r = 0; d_g = 0; d_b = 0; if (Lnum >= 0) { v7 = LightList[Lnum]._yoff; x = LightList[Lnum]._xoff; v6 = x; y = v7; if (x < 0) { v6 = x + 8; --v5; x += 8; v52 = v5; } if (v7 < 0) { v7 += 8; v4 = nYPos - 1; y = v7; v48 = nYPos - 1; } } *(_DWORD *)s_r = v6; *(_DWORD *)s_g = v7; v8 = 15; if (v5 - 15 >= 0) v44 = 15; else v44 = v5 + 1; if (v5 + 15 <= 112) v46 = 15; else v46 = 112 - v5; if (v4 - 15 >= 0) v43 = 15; else v43 = v4 + 1; if (v4 + 15 > 112) v8 = 112 - v4; v45 = v8; if (v5 >= 0 && v5 < MAXDUNX && v4 >= 0 && v4 < MAXDUNY) dTransVal[v5][v4] = 0; v55 = 0; v51 = v6 + 8 * v7; if (v43 > 0) { v47 = v4; do { Lnuma = 1; if (v46 > 1) { v9 = v5 + 1; v10 = 112 * (v5 + 1); v11 = &dung_map_rgba[16 * (v55 + 16 * v51)]; do { v12 = (unsigned char)v11[Lnuma]; if (v12 < 128) { v13 = (unsigned char)dung_map_radius[128 * nRadius + v12]; if (v9 >= 0 && v9 < 112 && v47 >= 0 && v47 < 112) { v14 = (unsigned char *)dTransVal + v47 + v10; v15 = (char)*v14; v17 = __OFSUB__(v13, v15); v16 = v13 - v15 < 0; v5 = v52; if (v16 ^ v17) *v14 = v13; } } ++Lnuma; v10 += 112; ++v9; } while (Lnuma < v46); v4 = v48; } ++v55; ++v47; } while (v55 < v43); } SetLightFX(&x, &y, s_r, s_g, &s_b, &d_r, &d_g, &d_b); v18 = 0; v51 = x + 8 * y; if (v45 > 0) { v47 = 112 * v5; do { Lnumb = 1; if (v46 > 1) { v19 = v4 - 1; v20 = &dung_map_rgba[16 * (d_b + v18 + 16 * v51) + d_g]; do { v21 = (unsigned char)v20[Lnumb]; if (v21 < 128) { v22 = (unsigned char)dung_map_radius[128 * nRadius + v21]; if (v18 + v5 >= 0 && v18 + v5 < 112 && v19 >= 0 && v19 < 112) { v23 = (unsigned char *)dTransVal + v47 + v19; v24 = (char)*v23; v17 = __OFSUB__(v22, v24); v16 = v22 - v24 < 0; v5 = v52; if (v16 ^ v17) *v23 = v22; } } ++Lnumb; --v19; } while (Lnumb < v46); v4 = v48; } v47 += 112; ++v18; } while (v18 < v45); } SetLightFX(&x, &y, s_r, s_g, &s_b, &d_r, &d_g, &d_b); v55 = 0; v51 = x + 8 * y; if (v45 > 0) { v46 = v4; do { Lnumc = 1; if (v44 > 1) { v25 = 112 * v5 - 112; v26 = v5 - 1; v27 = &dung_map_rgba[16 * (d_b + v55 + 16 * v51) + d_g]; do { v28 = (unsigned char)v27[Lnumc]; if (v28 < 128) { v29 = (unsigned char)dung_map_radius[128 * nRadius + v28]; if (v26 >= 0 && v26 < 112 && v46 >= 0 && v46 < 112) { v30 = (unsigned char *)dTransVal + v46 + v25; v31 = (char)*v30; v17 = __OFSUB__(v29, v31); v16 = v29 - v31 < 0; v5 = v52; if (v16 ^ v17) *v30 = v29; } } ++Lnumc; v25 -= 112; --v26; } while (Lnumc < v44); v4 = v48; } ++v55; --v46; } while (v55 < v45); } SetLightFX(&x, &y, s_r, s_g, &s_b, &d_r, &d_g, &d_b); v55 = 0; v51 = x + 8 * y; if (v43 > 0) { Lnumd = v5; *(_DWORD *)s_r = 112 * v5; do { v32 = 1; if (v44 > 1) { v33 = v4 + 1; v34 = &dung_map_rgba[16 * (d_b + v55 + 16 * v51) + d_g]; do { v35 = (unsigned char)v34[v32]; if (v35 < 128) { v36 = (unsigned char)dung_map_radius[128 * nRadius + v35]; if (Lnumd >= 0 && Lnumd < 112 && v33 >= 0 && v33 < 112) { v37 = (unsigned char *)dTransVal + v33 + *(_DWORD *)s_r; v38 = (char)*v37; v17 = __OFSUB__(v36, v38); v16 = v36 - v38 < 0; v4 = v48; if (v16 ^ v17) *v37 = v36; } } ++v32; ++v33; } while (v32 < v44); } ++v55; --Lnumd; *(_DWORD *)s_r -= 112; } while (v55 < v43); } } void __fastcall DoUnLight(int nXPos, int nYPos, int nRadius) { int max_y; // ebx int y; // esi int x; // edx int max_x; // edi signed int v7; // esi int v8; // eax int radius_block; // [esp+14h] [ebp+8h] max_y = nYPos + nRadius + 1; y = nYPos - (nRadius + 1); x = nXPos - (nRadius + 1); max_x = nXPos + nRadius + 1; if (y < 0) y = 0; if (max_y > MAXDUNY) max_y = MAXDUNY; if (x < 0) x = 0; if (max_x > MAXDUNX) max_x = MAXDUNX; for (radius_block = y; radius_block < max_y; ++radius_block) { v7 = x; if (x < max_x) { v8 = radius_block + 112 * x; do { if (v7 >= 0 && v7 < 112 && radius_block >= 0 && radius_block < 112) dTransVal[0][v8] = dTransVal2[0][v8]; ++v7; v8 += 112; } while (v7 < max_x); } } } void __fastcall DoUnVision(int nXPos, int nYPos, int nRadius) { int y2; // edi int y1; // esi int x1; // edx int x2; // ecx char *v7; // eax int i; // ecx int j; // edx y2 = nYPos + nRadius + 1; y1 = nYPos - (nRadius + 1); x1 = nXPos - (nRadius + 1); x2 = nRadius + 1 + nXPos; if (y1 < 0) y1 = 0; if (y2 > MAXDUNY) y2 = MAXDUNY; if (x1 < 0) x1 = 0; if (x2 > MAXDUNX) x2 = MAXDUNX; if (x1 < x2) { v7 = dFlags[x1]; i = x2 - x1; do { for (j = y1; j < y2; ++j) v7[j] &= ~(DFLAG_VISIBLE | DFLAG_LIT); v7 += 112; --i; } while (i); } } void __fastcall DoVision(int nXPos, int nYPos, int nRadius, unsigned char doautomap, int visible) { char *v5; // esi int v6; // esi int v7; // edi unsigned char *v8; // eax int v9; // ebx int v10; // ecx unsigned char v11; // dl int v12; // ecx int v13; // ecx unsigned char v14; // cl unsigned char v15; // dl int v16; // ecx int v17; // ecx int i; // [esp+Ch] [ebp-34h] unsigned char *v19; // [esp+10h] [ebp-30h] int v20; // [esp+14h] [ebp-2Ch] int v21; // [esp+18h] [ebp-28h] int v22; // [esp+1Ch] [ebp-24h] signed int v23; // [esp+20h] [ebp-20h] signed int v24; // [esp+24h] [ebp-1Ch] signed int v25; // [esp+28h] [ebp-18h] signed int v26; // [esp+2Ch] [ebp-14h] signed int v27; // [esp+30h] [ebp-10h] int v28; // [esp+34h] [ebp-Ch] int v29; // [esp+38h] [ebp-8h] unsigned char v30; // [esp+3Fh] [ebp-1h] unsigned char v31; // [esp+3Fh] [ebp-1h] v28 = nYPos; v29 = nXPos; if (nXPos >= 0 && nXPos <= MAXDUNX && nYPos >= 0 && nYPos <= MAXDUNY) { if (doautomap) { v5 = &dFlags[nXPos][nYPos]; if (*v5 >= 0) { SetAutomapView(nXPos, nXPos); nYPos = v28; nXPos = v29; } *v5 |= DFLAG_EXPLORED; } if (visible) dFlags[nXPos][nYPos] |= DFLAG_LIT; dFlags[nXPos][nYPos] |= DFLAG_VISIBLE; } v27 = 0; v6 = doautomap; v7 = doautomap; do { v20 = 0; v8 = &vCrawlTable[0][1]; v19 = &vCrawlTable[0][1]; do { v9 = 0; v21 = 0; for (i = 2 * (nRadius - RadiusAdj[v20]); v9 < i; v9 += 2) { if (v21) break; v26 = 0; v24 = 0; v25 = 0; v23 = 0; if (v27) { switch (v27) { case 1: v13 = v8[v9 - 1]; v6 = v29 - (unsigned char)v13; v31 = v8[v9]; v7 = v28 - v31; if ((_BYTE)v13 && v31) { v25 = 1; v24 = 1; } break; case 2: v12 = v8[v9 - 1]; v30 = v8[v9]; v6 = v29 + (unsigned char)v12; v7 = v28 - v30; if ((_BYTE)v12 && v30) { v26 = -1; v23 = 1; } break; case 3: v10 = v8[v9 - 1]; v6 = v29 - (unsigned char)v10; v11 = v8[v9]; v7 = v28 + v11; if ((_BYTE)v10) { if (v11) { v25 = -1; v24 = 1; } } break; } } else { v14 = v8[v9 - 1]; v15 = v8[v9]; v6 = v29 + v14; v7 = v28 + v15; if (v14 && v15) { v26 = -1; v23 = -1; } } if (v6 >= 0 && v6 <= MAXDUNX && v7 >= 0 && v7 <= MAXDUNY) { v22 = v7 + 112 * v6; v21 = (unsigned char)nBlockTable[dPiece[0][v22]]; if (!nBlockTable[dPiece[v6 + v26][v25 + v7]] || !nBlockTable[dPiece[v6 + v24][v23 + v7]]) { v16 = v7 + 112 * v6; if (doautomap) { if (dFlags[0][v22] >= 0) { SetAutomapView(v6, v7); v16 = v7 + 112 * v6; v8 = v19; } dFlags[0][v16] |= DFLAG_EXPLORED; } if (visible) dFlags[0][v16] |= DFLAG_LIT; dFlags[0][v16] |= DFLAG_VISIBLE; if (!v21) { v17 = dung_map[0][v16]; if (v17) TransList[v17] = 1; } } } } ++v20; v8 += 30; v19 = v8; } while ((signed int)v8 < (signed int)&vCrawlTable[23][1]); ++v27; } while (v27 < 4); } void __cdecl FreeLightTable() { char *v0; // ecx v0 = pLightTbl; pLightTbl = 0; mem_free_dbg(v0); } void __cdecl InitLightTable() { pLightTbl = (char *)DiabloAllocPtr(LIGHTSIZE); } void __cdecl MakeLightTable() { char *v0; // ebx signed int v1; // esi unsigned char v2; // al unsigned char v3; // cl signed int v4; // edi int v5; // edx signed int v6; // edi unsigned char v7; // cl unsigned char v8; // al signed int v9; // edx unsigned char v10; // cl unsigned char v11; // al char *v12; // ebx char *v13; // ebx int v14; // ecx signed int v15; // esi char v16; // al int v17; // edx int v18; // ebx signed int v19; // esi _BYTE *v20; // ebx char *v21; // ebx int v22; // edi unsigned char *v23; // esi signed int v24; // edx unsigned char *v25; // esi signed int v26; // edx signed int v27; // ecx char v28; // al _BYTE *v29; // ebx signed int v30; // edx char v31; // al signed int v32; // ecx signed int v33; // ecx char v34; // al int v35; // eax signed int v36; // esi char *v37; // eax signed int v38; // ebx int v39; // esi double v40; // st7 double v41; // st6 int v42; // ecx char *v43; // ecx BOOLEAN v44; // zf char v45[16]; // [esp+14h] [ebp-2Ch] /* check */ int v46; // [esp+24h] [ebp-1Ch] int v47; // [esp+28h] [ebp-18h] char *v48; // [esp+2Ch] [ebp-14h] int v49; // [esp+30h] [ebp-10h] int v50; // [esp+34h] [ebp-Ch] int v51; // [esp+38h] [ebp-8h] int v52; // [esp+3Ch] [ebp-4h] v51 = 0; v0 = pLightTbl; v1 = light4flag != 0 ? 3 : 15; v50 = light4flag != 0 ? 3 : 15; if (v1 > 0) { v49 = light4flag != 0 ? 3 : 15; do { *v0++ = 0; v52 = 0; do { v2 = 16 * v52 + 15; v3 = v51 + 16 * v52; v4 = 0; do { if (v4 || v52) *v0++ = v3; if (v3 >= v2) { v2 = 0; v3 = 0; } else { ++v3; } ++v4; } while (v4 < 16); ++v52; } while (v52 < 8); v52 = 16; v5 = v51 >> 1; do { v6 = 8; v7 = v5 + 8 * v52; v8 = 8 * v52 + 7; do { *v0++ = v7; if (v7 >= v8) { v8 = 0; v7 = 0; } else { ++v7; } --v6; } while (v6); ++v52; } while (v52 < 20); v52 = 10; do { v9 = 16; v10 = v51 + 16 * v52; v11 = 16 * v52 + 15; do { *v0++ = v10; if (v10 >= v11) { v11 = 0; v10 = 0; } else { ++v10; } if (v10 == LOBYTE(-1)) { v11 = 0; v10 = 0; } --v9; } while (v9); ++v52; } while (v52 < 16); if (light4flag) v51 += 5; else ++v51; --v49; } while (v49); } memset(v0, 0, 0x100u); v12 = v0 + 256; if (leveltype == DTYPE_HELL) { v13 = pLightTbl; if (v1 > 0) { v14 = v50; v49 = v50; do { v52 = 0; v45[0] = 0; v51 = v14; v15 = 1; v48 = (char *)(v50 / v14); v47 = v50 % v14; v16 = 1; do { v17 = v51; v45[v15] = v16; v51 = v47 + v17; if (v47 + v17 > v14 && v15 < 15) { ++v15; v51 -= v14; v45[v15] = v16; } if ((char *)++v52 == v48) { ++v16; v52 = 0; } ++v15; } while (v15 < 16); *v13 = 0; v18 = (int)(v13 + 1); *(_DWORD *)v18 = *(_DWORD *)&v45[1]; *(_DWORD *)(v18 + 4) = *(_DWORD *)&v45[5]; *(_DWORD *)(v18 + 8) = *(_DWORD *)&v45[9]; *(_WORD *)(v18 + 12) = *(_WORD *)&v45[13]; *(_BYTE *)(v18 + 14) = v45[15]; v19 = 15; v20 = (_BYTE *)(v18 + 15); do *v20++ = v45[v19--]; while (v19 > 0); *v20 = 1; v13 = (char *)v20 + 225; --v14; --v49; } while (v49); } *v13 = 0; v21 = v13 + 1; memset(v21, 1u, 0x1Cu); v22 = (int)(v21 + 28); *(_WORD *)v22 = 257; *(_BYTE *)(v22 + 2) = 1; v12 = v21 + 255; } v23 = LoadFileInMem("PlrGFX\\Infra.TRN", 0); v24 = 0; do *v12++ = v23[v24++]; while (v24 < 256); mem_free_dbg(v23); v25 = LoadFileInMem("PlrGFX\\Stone.TRN", 0); v26 = 0; do *v12++ = v25[v26++]; while (v26 < 256); mem_free_dbg(v25); v27 = 0; do { v28 = -30; do { if (v27 || v28 != -30) *v12 = v28; else *v12 = 0; ++v12; ++v28; } while ((unsigned char)v28 < 0xEFu); *v12 = 0; v29 = (unsigned char *)v12 + 1; *v29++ = 0; *v29 = 0; v12 = (char *)v29 + 1; ++v27; } while (v27 < 8); v30 = 4; do { v31 = -32; v32 = 8; do { *v12++ = v31; v31 += 2; --v32; } while (v32); --v30; } while (v30); v33 = 6; do { v34 = -32; do *v12++ = v34++; while ((unsigned char)v34 < 0xEFu); *v12++ = 0; --v33; } while (v33); v35 = 0; v51 = (int)dung_map_radius; v52 = 8; do { v36 = 0; v49 = 0; v50 = v35 + 1; do { if (v36 <= v52) *(_BYTE *)(v51 + v36) = (signed __int64)((double)v49 * 15.0 / ((double)v50 * 8.0) + 0.5); else *(_BYTE *)(v51 + v36) = 15; v49 = ++v36; } while (v36 < 128); v52 += 8; v51 += 128; v35 = v50; } while (v52 < 136); v49 = 0; v37 = dung_map_rgba; do { v52 = 0; do { v48 = v37; v50 = v49; v47 = 16; do { v38 = 0; v39 = v50 * v50; v51 = v52; do { v46 = v39 + v51 * v51; v46 = (unsigned char)(signed __int64)sqrt((double)v46); v40 = (double)v46; if (v40 >= 0.0) v41 = 0.5; else v41 = -0.5; v42 = (int)v48; v51 += 8; v48[v38++] = (signed __int64)(v41 + v40); } while (v38 < 16); v50 += 8; v43 = (char *)(v42 + 16); v44 = v47-- == 1; v48 = v43; } while (!v44); --v52; v37 = v43; } while (v52 > -8); --v49; } while ((signed int)v43 < (signed int)&dung_map_rgba[16384]); } // 525728: using guessed type int light4flag; #ifdef _DEBUG void __cdecl ToggleLighting() { int i; lightflag ^= 1; if (lightflag) { memset(dTransVal, 0, sizeof(dTransVal)); } else { memcpy(dTransVal, dTransVal2, sizeof(dTransVal)); for (i = 0; i < 4; i++) { if (plr[i].plractive) { if (currlevel == plr[i].plrlevel) DoLighting(plr[i].WorldX, plr[i].WorldY, plr[i]._pLightRad, -1); } } } } #endif void __cdecl InitLightMax() { lightmax = light4flag == 0 ? 15 : 3; } // 525728: using guessed type int light4flag; // 642A14: using guessed type char lightmax; void __cdecl InitLighting() { signed int v0; // eax v0 = 0; numlights = 0; dolighting = 0; lightflag = 0; do { lightactive[v0] = v0; ++v0; } while (v0 < 32); } // 642A18: using guessed type int dolighting; // 646A28: using guessed type int lightflag; int __fastcall AddLight(int x, int y, int r) { int lid; // eax lid = -1; if (!lightflag && numlights < 32) { lid = lightactive[numlights++]; dolighting = 1; LightList[lid]._lx = x; LightList[lid]._ly = y; LightList[lid]._lradius = r; LightList[lid]._xoff = 0; LightList[lid]._yoff = 0; LightList[lid]._ldel = 0; LightList[lid]._lunflag = 0; } return lid; } // 642A18: using guessed type int dolighting; // 646A28: using guessed type int lightflag; void __fastcall AddUnLight(int i) { if (!lightflag && i != -1) { LightList[i]._ldel = 1; dolighting = 1; } } // 642A18: using guessed type int dolighting; // 646A28: using guessed type int lightflag; void __fastcall ChangeLightRadius(int i, int r) { if (!lightflag && i != -1) { LightList[i]._lunx = LightList[i]._lx; LightList[i]._luny = LightList[i]._ly; LightList[i]._lunflag = 1; LightList[i]._lunr = LightList[i]._lradius; dolighting = 1; LightList[i]._lradius = r; } } // 642A18: using guessed type int dolighting; // 646A28: using guessed type int lightflag; void __fastcall ChangeLightXY(int i, int x, int y) { if (!lightflag && i != -1) { LightList[i]._lunx = LightList[i]._lx; LightList[i]._lunflag = 1; dolighting = 1; LightList[i]._luny = LightList[i]._ly; LightList[i]._lunr = LightList[i]._lradius; LightList[i]._ly = y; LightList[i]._lx = x; } } // 642A18: using guessed type int dolighting; // 646A28: using guessed type int lightflag; void __fastcall ChangeLightOff(int i, int x, int y) { if (!lightflag && i != -1) { LightList[i]._xoff = x; LightList[i]._lunx = LightList[i]._lx; LightList[i]._luny = LightList[i]._ly; LightList[i]._lunr = LightList[i]._lradius; LightList[i]._lunflag = 1; LightList[i]._yoff = y; dolighting = 1; } } // 642A18: using guessed type int dolighting; // 646A28: using guessed type int lightflag; void __fastcall ChangeLight(int i, int x, int y, int r) { if (!lightflag && i != -1) { LightList[i]._lunx = LightList[i]._lx; LightList[i]._luny = LightList[i]._ly; LightList[i]._lunr = LightList[i]._lradius; LightList[i]._lunflag = 1; LightList[i]._lx = x; LightList[i]._ly = y; LightList[i]._lradius = r; dolighting = 1; } } // 642A18: using guessed type int dolighting; // 646A28: using guessed type int lightflag; void __cdecl ProcessLightList() { int v0; // ebp int v1; // edi int v2; // esi int i; // esi int v4; // eax int v5; // ecx unsigned char v6; // bl char v7; // dl v0 = 0; if (!lightflag) { if (dolighting) { v1 = numlights; if (numlights > 0) { do { v2 = (unsigned char)lightactive[v0]; if (LightList[v2]._ldel) DoUnLight(LightList[v2]._lx, LightList[v2]._ly, LightList[v2]._lradius); if (LightList[v2]._lunflag) { DoUnLight(LightList[v2]._lunx, LightList[v2]._luny, LightList[v2]._lunr); LightList[v2]._lunflag = 0; } ++v0; } while (v0 < v1); } for (i = 0; i < v1; ++i) { v4 = (unsigned char)lightactive[i]; if (!LightList[v4]._ldel) DoLighting( LightList[v4]._lx, LightList[v4]._ly, LightList[v4]._lradius, (unsigned char)lightactive[i]); } v5 = 0; if (v1 > 0) { do { v6 = lightactive[v5]; if (LightList[v6]._ldel) { v7 = lightactive[--v1]; lightactive[v1] = v6; lightactive[v5] = v7; } else { ++v5; } } while (v5 < v1); numlights = v1; } } dolighting = 0; } } // 642A18: using guessed type int dolighting; // 646A28: using guessed type int lightflag; void __cdecl SavePreLighting() { memcpy(dTransVal2, dTransVal, 0x3100u); } void __cdecl InitVision() { numvision = 0; dovision = 0; visionid = 1; if (TransVal > 0) memset(TransList, 0, TransVal); } // 5A5590: using guessed type char TransVal; // 642A0C: using guessed type int dovision; int __fastcall AddVision(int x, int y, int r, BOOL mine) { int vid; // eax int v5; // esi vid = r; if (numvision < 32) { v5 = numvision; dovision = 1; VisionList[v5]._lx = x; VisionList[v5]._ly = y; VisionList[v5]._lradius = r; vid = visionid++; VisionList[v5]._lid = vid; VisionList[v5]._ldel = 0; ++numvision; VisionList[v5]._lunflag = 0; VisionList[v5]._lflags = mine != 0; } return vid; } // 642A0C: using guessed type int dovision; void __fastcall ChangeVisionRadius(int id, int r) { int i; // esi if (numvision > 0) { for (i = 0; i < numvision; i++) { if (VisionList[i]._lid == id) { VisionList[i]._lunflag = 1; VisionList[i]._lunx = VisionList[i]._lx; VisionList[i]._luny = VisionList[i]._ly; VisionList[i]._lunr = VisionList[i]._lradius; VisionList[i]._lradius = r; dovision = 1; } } } } // 642A0C: using guessed type int dovision; void __fastcall ChangeVisionXY(int id, int x, int y) { int i; // esi if (numvision > 0) { for (i = 0; i < numvision; i++) { if (VisionList[i]._lid == id) { VisionList[i]._lunflag = 1; VisionList[i]._lunx = VisionList[i]._lx; VisionList[i]._luny = VisionList[i]._ly; VisionList[i]._lunr = VisionList[i]._lradius; VisionList[i]._lx = x; VisionList[i]._ly = y; dovision = 1; } } } } // 642A0C: using guessed type int dovision; void __cdecl ProcessVisionList() { BOOLEAN delflag; // ecx int i; if (dovision) { for (i = 0; i < numvision; i++) { if (VisionList[i]._ldel) DoUnVision(VisionList[i]._lx, VisionList[i]._ly, VisionList[i]._lradius); if (VisionList[i]._lunflag) { DoUnVision(VisionList[i]._lunx, VisionList[i]._luny, VisionList[i]._lunr); VisionList[i]._lunflag = 0; } } if (TransVal > 0) memset(TransList, 0, TransVal); for (i = 0; i < numvision; i++) { if (!VisionList[i]._ldel) DoVision(VisionList[i]._lx, VisionList[i]._ly, VisionList[i]._lradius, VisionList[i]._lflags & 1, VisionList[i]._lflags & 1); } do { delflag = 0; if (numvision <= 0) break; for (i = 0; i < numvision; i++) { if (VisionList[i]._ldel) { --numvision; if (numvision > 0 && i != numvision) qmemcpy(&VisionList[i], &VisionList[numvision], sizeof(LightListStruct)); delflag = 1; } } } while (delflag); } dovision = 0; } // 5A5590: using guessed type char TransVal; // 642A0C: using guessed type int dovision; void __cdecl lighting_color_cycling() { char *v0; // eax signed int v1; // ebx char *v2; // eax char *v3; // edi char v4; // dl const void *v5; // esi if (leveltype == DTYPE_HELL) { v0 = pLightTbl; if ((light4flag != 0 ? 4 : 16) > 0) { v1 = light4flag != 0 ? 4 : 16; do { v2 = v0 + 1; v3 = v2; v4 = *v2; v5 = v2 + 1; v2 += 30; qmemcpy(v3, v5, 0x1Eu); *v2 = v4; v0 = v2 + 225; --v1; } while (v1); } } } // 525728: using guessed type int light4flag;