mirror of
https://github.com/XProger/OpenLara.git
synced 2025-02-24 23:42:49 +01:00
Merge branch 'master' of https://github.com/XProger/OpenLara
This commit is contained in:
commit
c8c7d58494
81
src/cache.h
81
src/cache.h
@ -321,11 +321,19 @@ struct AmbientCache {
|
||||
tasksCount = 0;
|
||||
}
|
||||
|
||||
Cube* getAmbient(int roomIndex, int sector) {
|
||||
Cube* getAmbient(int roomIndex, int x, int z) {
|
||||
TR::Room &r = level->rooms[roomIndex];
|
||||
|
||||
int sx = clamp(x / 1024, 0, r.xSectors - 1);
|
||||
int sz = clamp(z / 1024, 0, r.zSectors - 1);
|
||||
int sector = sx * r.zSectors + sz;
|
||||
|
||||
if (level->state.flags.flipped && r.alternateRoom > -1)
|
||||
sector += r.xSectors * r.zSectors;
|
||||
|
||||
if (r.sectors[sector].floor == TR::NO_FLOOR)
|
||||
return NULL;
|
||||
|
||||
Cube *cube = &items[offsets[roomIndex] + sector];
|
||||
if (cube->status == Cube::BLANK)
|
||||
addTask(roomIndex, sector);
|
||||
@ -333,17 +341,70 @@ struct AmbientCache {
|
||||
return cube->status == Cube::READY ? cube : NULL;
|
||||
}
|
||||
|
||||
void lerpCubes(Cube &result, const Cube *a, const Cube *b, float t) {
|
||||
ASSERT(a != NULL && b != NULL);
|
||||
result.colors[0] = a->colors[0].lerp(b->colors[0], t);
|
||||
result.colors[1] = a->colors[1].lerp(b->colors[1], t);
|
||||
result.colors[2] = a->colors[2].lerp(b->colors[2], t);
|
||||
result.colors[3] = a->colors[3].lerp(b->colors[3], t);
|
||||
result.colors[4] = a->colors[4].lerp(b->colors[4], t);
|
||||
result.colors[5] = a->colors[5].lerp(b->colors[5], t);
|
||||
}
|
||||
|
||||
void getAmbient(int room, const vec3 &pos, Cube &value) {
|
||||
TR::Room &r = level->rooms[room];
|
||||
|
||||
int sx = clamp((int(pos.x) - r.info.x) / 1024, 0, r.xSectors - 1);
|
||||
int sz = clamp((int(pos.z) - r.info.z) / 1024, 0, r.zSectors - 1);
|
||||
|
||||
int sector = sx * r.zSectors + sz;
|
||||
Cube *a = getAmbient(room, sector);
|
||||
if (a)
|
||||
value = *a;
|
||||
else
|
||||
|
||||
int x = int(pos.x) - r.info.x;
|
||||
int z = int(pos.z) - r.info.z;
|
||||
|
||||
// cc cx
|
||||
// cz cd
|
||||
|
||||
Cube *cc = getAmbient(room, x, z);
|
||||
if (cc && cc->status == Cube::READY) {
|
||||
Cube *cx = NULL, *cz = NULL, *cd = NULL;
|
||||
|
||||
int sx = (x / 1024) * 1024 + 512;
|
||||
int sz = (z / 1024) * 1024 + 512;
|
||||
|
||||
int ox = sx + sign(x - sx) * 1024;
|
||||
int oz = sz + sign(z - sz) * 1024;
|
||||
|
||||
float tx, tz;
|
||||
tx = abs(x - sx) / 1024.0f;
|
||||
tz = abs(z - sz) / 1024.0f;
|
||||
|
||||
cx = getAmbient(room, ox, sz);
|
||||
cz = getAmbient(room, sx, oz);
|
||||
cd = getAmbient(room, ox, oz);
|
||||
|
||||
if (cx != NULL && cx->status != Cube::READY) cx = cc;
|
||||
if (cz != NULL && cz->status != Cube::READY) cz = cc;
|
||||
if (cd != NULL && cd->status != Cube::READY) cd = cc;
|
||||
|
||||
Cube lx, lz;
|
||||
if (cd != NULL && cx != NULL && cz != NULL) {
|
||||
lerpCubes(lx, cc, cx, tx);
|
||||
lerpCubes(lz, cz, cd, tx);
|
||||
lerpCubes(value, &lx, &lz, tz);
|
||||
} else if (cd != NULL && cx != NULL) {
|
||||
lerpCubes(lx, cc, cx, tx);
|
||||
lerpCubes(value, &lx, cd, tz);
|
||||
} else if (cd != NULL && cz != NULL) {
|
||||
lerpCubes(lz, cc, cz, tz);
|
||||
lerpCubes(value, &lz, cd, tx);
|
||||
} else if (cx != NULL && cz != NULL) {
|
||||
lerpCubes(lx, cc, cx, tx);
|
||||
lerpCubes(value, &lx, cz, tz);
|
||||
} else if (cx != NULL) {
|
||||
lerpCubes(value, cc, cx, tx);
|
||||
} else if (cz != NULL) {
|
||||
lerpCubes(value, cc, cz, tz);
|
||||
} else
|
||||
value = *cc;
|
||||
|
||||
value.status = cc->status;
|
||||
} else
|
||||
value.status = Cube::BLANK;
|
||||
}
|
||||
};
|
||||
|
11
src/level.h
11
src/level.h
@ -440,13 +440,19 @@ struct Level : IGame {
|
||||
Core::Pass tmpPass = Core::pass;
|
||||
Core::eye = 0.0f;
|
||||
|
||||
// TODO: fix for wrong room visibility checks, FIX IT!
|
||||
int roomsCount = 0;
|
||||
int roomsList[256];
|
||||
for (int i = 0; i < level.roomsCount; i++)
|
||||
roomsList[roomsCount++] = i;
|
||||
// -----
|
||||
// render level into cube faces or texture images
|
||||
for (int i = 0; i < 6; i++) {
|
||||
setupCubeCamera(pos, i);
|
||||
Core::pass = pass;
|
||||
Texture *target = (targets[0]->opt & OPT_CUBEMAP) ? targets[0] : targets[i * stride];
|
||||
Core::setTarget(target, RT_CLEAR_COLOR | RT_CLEAR_DEPTH | RT_STORE_COLOR, i);
|
||||
renderView(roomIndex, false, false);
|
||||
renderView(roomIndex, false, false, roomsCount, roomsList);
|
||||
}
|
||||
|
||||
Core::pass = tmpPass;
|
||||
@ -2343,7 +2349,7 @@ struct Level : IGame {
|
||||
Core::validateRenderState();
|
||||
// Debug::Level::rooms(level, lara->pos, lara->getEntity().room);
|
||||
// Debug::Level::lights(level, player->getRoomIndex(), player);
|
||||
// Debug::Level::sectors(this, lara->getRoomIndex(), (int)lara->pos.y);
|
||||
// Debug::Level::sectors(this, players[0]->getRoomIndex(), (int)players[0]->pos.y);
|
||||
// Core::setDepthTest(false);
|
||||
// Debug::Level::portals(level);
|
||||
// Core::setDepthTest(true);
|
||||
@ -2399,6 +2405,7 @@ struct Level : IGame {
|
||||
glBegin(GL_LINES);
|
||||
float S = 64.0f;
|
||||
for (int i = 0; i < level.roomsCount; i++) {
|
||||
if (i != players[0]->getRoomIndex()) continue;
|
||||
TR::Room &r = level.rooms[i];
|
||||
for (int j = 0; j < r.xSectors * r.zSectors; j++) {
|
||||
TR::Room::Sector &s = r.sectors[j];
|
||||
|
220
src/video.h
220
src/video.h
@ -16,118 +16,118 @@ struct AC_ENTRY {
|
||||
static const AC_ENTRY STR_AC[] = {
|
||||
// signBit = (8 + shift) - length
|
||||
// AC_LUT_1 (shift = 1)
|
||||
{ 0b11000000 , 1 , 1 , 4 },
|
||||
{ 0b10000000 , 0 , 2 , 5 },
|
||||
{ 0b10100000 , 2 , 1 , 5 },
|
||||
{ 0b01010000 , 0 , 3 , 6 },
|
||||
{ 0b01100000 , 4 , 1 , 6 },
|
||||
{ 0b01110000 , 3 , 1 , 6 },
|
||||
{ 0b00100000 , 7 , 1 , 7 },
|
||||
{ 0b00101000 , 6 , 1 , 7 },
|
||||
{ 0b00110000 , 1 , 2 , 7 },
|
||||
{ 0b00111000 , 5 , 1 , 7 },
|
||||
{ 0b00010000 , 2 , 2 , 8 },
|
||||
{ 0b00010100 , 9 , 1 , 8 },
|
||||
{ 0b00011000 , 0 , 4 , 8 },
|
||||
{ 0b00011100 , 8 , 1 , 8 },
|
||||
{ 0b01000000 , 13 , 1 , 9 },
|
||||
{ 0b01000010 , 0 , 6 , 9 },
|
||||
{ 0b01000100 , 12 , 1 , 9 },
|
||||
{ 0b01000110 , 11 , 1 , 9 },
|
||||
{ 0b01001000 , 3 , 2 , 9 },
|
||||
{ 0b01001010 , 1 , 3 , 9 },
|
||||
{ 0b01001100 , 0 , 5 , 9 },
|
||||
{ 0b01001110 , 10 , 1 , 9 },
|
||||
{ 0XC0 , 1 , 1 , 4 }, // 11000000
|
||||
{ 0X80 , 0 , 2 , 5 }, // 10000000
|
||||
{ 0XA0 , 2 , 1 , 5 }, // 10100000
|
||||
{ 0X50 , 0 , 3 , 6 }, // 01010000
|
||||
{ 0X60 , 4 , 1 , 6 }, // 01100000
|
||||
{ 0X70 , 3 , 1 , 6 }, // 01110000
|
||||
{ 0X20 , 7 , 1 , 7 }, // 00100000
|
||||
{ 0X28 , 6 , 1 , 7 }, // 00101000
|
||||
{ 0X30 , 1 , 2 , 7 }, // 00110000
|
||||
{ 0X38 , 5 , 1 , 7 }, // 00111000
|
||||
{ 0X10 , 2 , 2 , 8 }, // 00010000
|
||||
{ 0X14 , 9 , 1 , 8 }, // 00010100
|
||||
{ 0X18 , 0 , 4 , 8 }, // 00011000
|
||||
{ 0X1C , 8 , 1 , 8 }, // 00011100
|
||||
{ 0X40 , 13 , 1 , 9 }, // 01000000
|
||||
{ 0X42 , 0 , 6 , 9 }, // 01000010
|
||||
{ 0X44 , 12 , 1 , 9 }, // 01000100
|
||||
{ 0X46 , 11 , 1 , 9 }, // 01000110
|
||||
{ 0X48 , 3 , 2 , 9 }, // 01001000
|
||||
{ 0X4A , 1 , 3 , 9 }, // 01001010
|
||||
{ 0X4C , 0 , 5 , 9 }, // 01001100
|
||||
{ 0X4E , 10 , 1 , 9 }, // 01001110
|
||||
// AC_LUT_6 (shift = 6)
|
||||
{ 0b10000000 , 16 , 1 , 11 },
|
||||
{ 0b10010000 , 5 , 2 , 11 },
|
||||
{ 0b10100000 , 0 , 7 , 11 },
|
||||
{ 0b10110000 , 2 , 3 , 11 },
|
||||
{ 0b11000000 , 1 , 4 , 11 },
|
||||
{ 0b11010000 , 15 , 1 , 11 },
|
||||
{ 0b11100000 , 14 , 1 , 11 },
|
||||
{ 0b11110000 , 4 , 2 , 11 },
|
||||
{ 0b01000000 , 0 , 11 , 13 },
|
||||
{ 0b01000100 , 8 , 2 , 13 },
|
||||
{ 0b01001000 , 4 , 3 , 13 },
|
||||
{ 0b01001100 , 0 , 10 , 13 },
|
||||
{ 0b01010000 , 2 , 4 , 13 },
|
||||
{ 0b01010100 , 7 , 2 , 13 },
|
||||
{ 0b01011000 , 21 , 1 , 13 },
|
||||
{ 0b01011100 , 20 , 1 , 13 },
|
||||
{ 0b01100000 , 0 , 9 , 13 },
|
||||
{ 0b01100100 , 19 , 1 , 13 },
|
||||
{ 0b01101000 , 18 , 1 , 13 },
|
||||
{ 0b01101100 , 1 , 5 , 13 },
|
||||
{ 0b01110000 , 3 , 3 , 13 },
|
||||
{ 0b01110100 , 0 , 8 , 13 },
|
||||
{ 0b01111000 , 6 , 2 , 13 },
|
||||
{ 0b01111100 , 17 , 1 , 13 },
|
||||
{ 0b00100000 , 10 , 2 , 14 },
|
||||
{ 0b00100010 , 9 , 2 , 14 },
|
||||
{ 0b00100100 , 5 , 3 , 14 },
|
||||
{ 0b00100110 , 3 , 4 , 14 },
|
||||
{ 0b00101000 , 2 , 5 , 14 },
|
||||
{ 0b00101010 , 1 , 7 , 14 },
|
||||
{ 0b00101100 , 1 , 6 , 14 },
|
||||
{ 0b00101110 , 0 , 15 , 14 },
|
||||
{ 0b00110000 , 0 , 14 , 14 },
|
||||
{ 0b00110010 , 0 , 13 , 14 },
|
||||
{ 0b00110100 , 0 , 12 , 14 },
|
||||
{ 0b00110110 , 26 , 1 , 14 },
|
||||
{ 0b00111000 , 25 , 1 , 14 },
|
||||
{ 0b00111010 , 24 , 1 , 14 },
|
||||
{ 0b00111100 , 23 , 1 , 14 },
|
||||
{ 0b00111110 , 22 , 1 , 14 },
|
||||
{ 0X80 , 16 , 1 , 11 }, // 10000000
|
||||
{ 0X90 , 5 , 2 , 11 }, // 10010000
|
||||
{ 0XA0 , 0 , 7 , 11 }, // 10100000
|
||||
{ 0XB0 , 2 , 3 , 11 }, // 10110000
|
||||
{ 0XC0 , 1 , 4 , 11 }, // 11000000
|
||||
{ 0XD0 , 15 , 1 , 11 }, // 11010000
|
||||
{ 0XE0 , 14 , 1 , 11 }, // 11100000
|
||||
{ 0XF0 , 4 , 2 , 11 }, // 11110000
|
||||
{ 0X40 , 0 , 11 , 13 }, // 01000000
|
||||
{ 0X44 , 8 , 2 , 13 }, // 01000100
|
||||
{ 0X48 , 4 , 3 , 13 }, // 01001000
|
||||
{ 0X4C , 0 , 10 , 13 }, // 01001100
|
||||
{ 0X50 , 2 , 4 , 13 }, // 01010000
|
||||
{ 0X54 , 7 , 2 , 13 }, // 01010100
|
||||
{ 0X58 , 21 , 1 , 13 }, // 01011000
|
||||
{ 0X5C , 20 , 1 , 13 }, // 01011100
|
||||
{ 0X60 , 0 , 9 , 13 }, // 01100000
|
||||
{ 0X64 , 19 , 1 , 13 }, // 01100100
|
||||
{ 0X68 , 18 , 1 , 13 }, // 01101000
|
||||
{ 0X6C , 1 , 5 , 13 }, // 01101100
|
||||
{ 0X70 , 3 , 3 , 13 }, // 01110000
|
||||
{ 0X74 , 0 , 8 , 13 }, // 01110100
|
||||
{ 0X78 , 6 , 2 , 13 }, // 01111000
|
||||
{ 0X7C , 17 , 1 , 13 }, // 01111100
|
||||
{ 0X20 , 10 , 2 , 14 }, // 00100000
|
||||
{ 0X22 , 9 , 2 , 14 }, // 00100010
|
||||
{ 0X24 , 5 , 3 , 14 }, // 00100100
|
||||
{ 0X26 , 3 , 4 , 14 }, // 00100110
|
||||
{ 0X28 , 2 , 5 , 14 }, // 00101000
|
||||
{ 0X2A , 1 , 7 , 14 }, // 00101010
|
||||
{ 0X2C , 1 , 6 , 14 }, // 00101100
|
||||
{ 0X2E , 0 , 15 , 14 }, // 00101110
|
||||
{ 0X30 , 0 , 14 , 14 }, // 00110000
|
||||
{ 0X32 , 0 , 13 , 14 }, // 00110010
|
||||
{ 0X34 , 0 , 12 , 14 }, // 00110100
|
||||
{ 0X36 , 26 , 1 , 14 }, // 00110110
|
||||
{ 0X38 , 25 , 1 , 14 }, // 00111000
|
||||
{ 0X3A , 24 , 1 , 14 }, // 00111010
|
||||
{ 0X3C , 23 , 1 , 14 }, // 00111100
|
||||
{ 0X3E , 22 , 1 , 14 }, // 00111110
|
||||
// AC_LUT_9 (shift = 9)
|
||||
{ 0b10000000 , 0 , 31 , 15 },
|
||||
{ 0b10001000 , 0 , 30 , 15 },
|
||||
{ 0b10010000 , 0 , 29 , 15 },
|
||||
{ 0b10011000 , 0 , 28 , 15 },
|
||||
{ 0b10100000 , 0 , 27 , 15 },
|
||||
{ 0b10101000 , 0 , 26 , 15 },
|
||||
{ 0b10110000 , 0 , 25 , 15 },
|
||||
{ 0b10111000 , 0 , 24 , 15 },
|
||||
{ 0b11000000 , 0 , 23 , 15 },
|
||||
{ 0b11001000 , 0 , 22 , 15 },
|
||||
{ 0b11010000 , 0 , 21 , 15 },
|
||||
{ 0b11011000 , 0 , 20 , 15 },
|
||||
{ 0b11100000 , 0 , 19 , 15 },
|
||||
{ 0b11101000 , 0 , 18 , 15 },
|
||||
{ 0b11110000 , 0 , 17 , 15 },
|
||||
{ 0b11111000 , 0 , 16 , 15 },
|
||||
{ 0b01000000 , 0 , 40 , 16 },
|
||||
{ 0b01000100 , 0 , 39 , 16 },
|
||||
{ 0b01001000 , 0 , 38 , 16 },
|
||||
{ 0b01001100 , 0 , 37 , 16 },
|
||||
{ 0b01010000 , 0 , 36 , 16 },
|
||||
{ 0b01010100 , 0 , 35 , 16 },
|
||||
{ 0b01011000 , 0 , 34 , 16 },
|
||||
{ 0b01011100 , 0 , 33 , 16 },
|
||||
{ 0b01100000 , 0 , 32 , 16 },
|
||||
{ 0b01100100 , 1 , 14 , 16 },
|
||||
{ 0b01101000 , 1 , 13 , 16 },
|
||||
{ 0b01101100 , 1 , 12 , 16 },
|
||||
{ 0b01110000 , 1 , 11 , 16 },
|
||||
{ 0b01110100 , 1 , 10 , 16 },
|
||||
{ 0b01111000 , 1 , 9 , 16 },
|
||||
{ 0b01111100 , 1 , 8 , 16 },
|
||||
{ 0b00100000 , 1 , 18 , 17 },
|
||||
{ 0b00100010 , 1 , 17 , 17 },
|
||||
{ 0b00100100 , 1 , 16 , 17 },
|
||||
{ 0b00100110 , 1 , 15 , 17 },
|
||||
{ 0b00101000 , 6 , 3 , 17 },
|
||||
{ 0b00101010 , 16 , 2 , 17 },
|
||||
{ 0b00101100 , 15 , 2 , 17 },
|
||||
{ 0b00101110 , 14 , 2 , 17 },
|
||||
{ 0b00110000 , 13 , 2 , 17 },
|
||||
{ 0b00110010 , 12 , 2 , 17 },
|
||||
{ 0b00110100 , 11 , 2 , 17 },
|
||||
{ 0b00110110 , 31 , 1 , 17 },
|
||||
{ 0b00111000 , 30 , 1 , 17 },
|
||||
{ 0b00111010 , 29 , 1 , 17 },
|
||||
{ 0b00111100 , 28 , 1 , 17 },
|
||||
{ 0b00111110 , 27 , 1 , 17 },
|
||||
{ 0X80 , 0 , 31 , 15 }, // 10000000
|
||||
{ 0X88 , 0 , 30 , 15 }, // 10001000
|
||||
{ 0X90 , 0 , 29 , 15 }, // 10010000
|
||||
{ 0X98 , 0 , 28 , 15 }, // 10011000
|
||||
{ 0XA0 , 0 , 27 , 15 }, // 10100000
|
||||
{ 0XA8 , 0 , 26 , 15 }, // 10101000
|
||||
{ 0XB0 , 0 , 25 , 15 }, // 10110000
|
||||
{ 0XB8 , 0 , 24 , 15 }, // 10111000
|
||||
{ 0XC0 , 0 , 23 , 15 }, // 11000000
|
||||
{ 0XC8 , 0 , 22 , 15 }, // 11001000
|
||||
{ 0XD0 , 0 , 21 , 15 }, // 11010000
|
||||
{ 0XD8 , 0 , 20 , 15 }, // 11011000
|
||||
{ 0XE0 , 0 , 19 , 15 }, // 11100000
|
||||
{ 0XE8 , 0 , 18 , 15 }, // 11101000
|
||||
{ 0XF0 , 0 , 17 , 15 }, // 11110000
|
||||
{ 0XF8 , 0 , 16 , 15 }, // 11111000
|
||||
{ 0X40 , 0 , 40 , 16 }, // 01000000
|
||||
{ 0X44 , 0 , 39 , 16 }, // 01000100
|
||||
{ 0X48 , 0 , 38 , 16 }, // 01001000
|
||||
{ 0X4C , 0 , 37 , 16 }, // 01001100
|
||||
{ 0X50 , 0 , 36 , 16 }, // 01010000
|
||||
{ 0X54 , 0 , 35 , 16 }, // 01010100
|
||||
{ 0X58 , 0 , 34 , 16 }, // 01011000
|
||||
{ 0X5C , 0 , 33 , 16 }, // 01011100
|
||||
{ 0X60 , 0 , 32 , 16 }, // 01100000
|
||||
{ 0X64 , 1 , 14 , 16 }, // 01100100
|
||||
{ 0X68 , 1 , 13 , 16 }, // 01101000
|
||||
{ 0X6C , 1 , 12 , 16 }, // 01101100
|
||||
{ 0X70 , 1 , 11 , 16 }, // 01110000
|
||||
{ 0X74 , 1 , 10 , 16 }, // 01110100
|
||||
{ 0X78 , 1 , 9 , 16 }, // 01111000
|
||||
{ 0X7C , 1 , 8 , 16 }, // 01111100
|
||||
{ 0X20 , 1 , 18 , 17 }, // 00100000
|
||||
{ 0X22 , 1 , 17 , 17 }, // 00100010
|
||||
{ 0X24 , 1 , 16 , 17 }, // 00100100
|
||||
{ 0X26 , 1 , 15 , 17 }, // 00100110
|
||||
{ 0X28 , 6 , 3 , 17 }, // 00101000
|
||||
{ 0X2A , 16 , 2 , 17 }, // 00101010
|
||||
{ 0X2C , 15 , 2 , 17 }, // 00101100
|
||||
{ 0X2E , 14 , 2 , 17 }, // 00101110
|
||||
{ 0X30 , 13 , 2 , 17 }, // 00110000
|
||||
{ 0X32 , 12 , 2 , 17 }, // 00110010
|
||||
{ 0X34 , 11 , 2 , 17 }, // 00110100
|
||||
{ 0X36 , 31 , 1 , 17 }, // 00110110
|
||||
{ 0X38 , 30 , 1 , 17 }, // 00111000
|
||||
{ 0X3A , 29 , 1 , 17 }, // 00111010
|
||||
{ 0X3C , 28 , 1 , 17 }, // 00111100
|
||||
{ 0X3E , 27 , 1 , 17 }, // 00111110
|
||||
};
|
||||
|
||||
static const uint8 STR_ZIG_ZAG[] = {
|
||||
|
Loading…
x
Reference in New Issue
Block a user