Generates lightmaps based on the info given by the .light field of each Terrain_seg
| 1051 | |
| 1052 | // Generates lightmaps based on the info given by the .light field of each Terrain_seg |
| 1053 | void UpdateTerrainLightmaps() { |
| 1054 | int i, t; |
| 1055 | |
| 1056 | // First make the wraparounds work right |
| 1057 | |
| 1058 | // lower-left strip |
| 1059 | for (i = 0; i < 128; i++) { |
| 1060 | Terrain_seg[i * TERRAIN_WIDTH].r = Terrain_seg[i * TERRAIN_WIDTH + 128].r; |
| 1061 | Terrain_seg[i * TERRAIN_WIDTH].g = Terrain_seg[i * TERRAIN_WIDTH + 128].g; |
| 1062 | Terrain_seg[i * TERRAIN_WIDTH].b = Terrain_seg[i * TERRAIN_WIDTH + 128].b; |
| 1063 | |
| 1064 | Terrain_seg[i].r = Terrain_seg[128 * TERRAIN_WIDTH + i].r; |
| 1065 | Terrain_seg[i].g = Terrain_seg[128 * TERRAIN_WIDTH + i].g; |
| 1066 | Terrain_seg[i].b = Terrain_seg[128 * TERRAIN_WIDTH + i].b; |
| 1067 | } |
| 1068 | |
| 1069 | // lower-right strip |
| 1070 | for (i = 0; i < 128; i++) { |
| 1071 | Terrain_seg[i * TERRAIN_WIDTH + 255].r = Terrain_seg[i * TERRAIN_WIDTH + 127].r; |
| 1072 | Terrain_seg[i * TERRAIN_WIDTH + 255].g = Terrain_seg[i * TERRAIN_WIDTH + 127].g; |
| 1073 | Terrain_seg[i * TERRAIN_WIDTH + 255].b = Terrain_seg[i * TERRAIN_WIDTH + 127].b; |
| 1074 | |
| 1075 | Terrain_seg[i + 128].r = Terrain_seg[128 * TERRAIN_WIDTH + i + 128].r; |
| 1076 | Terrain_seg[i + 128].g = Terrain_seg[128 * TERRAIN_WIDTH + i + 128].g; |
| 1077 | Terrain_seg[i + 128].b = Terrain_seg[128 * TERRAIN_WIDTH + i + 128].b; |
| 1078 | } |
| 1079 | |
| 1080 | // upper-left strip |
| 1081 | for (i = 0; i < 128; i++) { |
| 1082 | Terrain_seg[(i + 128) * TERRAIN_WIDTH].r = Terrain_seg[(i + 128) * TERRAIN_WIDTH + 128].r; |
| 1083 | Terrain_seg[(i + 128) * TERRAIN_WIDTH].g = Terrain_seg[(i + 128) * TERRAIN_WIDTH + 128].g; |
| 1084 | Terrain_seg[(i + 128) * TERRAIN_WIDTH].b = Terrain_seg[(i + 128) * TERRAIN_WIDTH + 128].b; |
| 1085 | |
| 1086 | Terrain_seg[255 * TERRAIN_WIDTH + i].r = Terrain_seg[127 * TERRAIN_WIDTH + i].r; |
| 1087 | Terrain_seg[255 * TERRAIN_WIDTH + i].g = Terrain_seg[127 * TERRAIN_WIDTH + i].g; |
| 1088 | Terrain_seg[255 * TERRAIN_WIDTH + i].b = Terrain_seg[127 * TERRAIN_WIDTH + i].b; |
| 1089 | } |
| 1090 | |
| 1091 | // upper-right strip |
| 1092 | for (i = 0; i < 128; i++) { |
| 1093 | Terrain_seg[(i + 128) * TERRAIN_WIDTH + 255].r = Terrain_seg[(i + 128) * TERRAIN_WIDTH + 127].r; |
| 1094 | Terrain_seg[(i + 128) * TERRAIN_WIDTH + 255].g = Terrain_seg[(i + 128) * TERRAIN_WIDTH + 127].g; |
| 1095 | Terrain_seg[(i + 128) * TERRAIN_WIDTH + 255].b = Terrain_seg[(i + 128) * TERRAIN_WIDTH + 127].b; |
| 1096 | |
| 1097 | Terrain_seg[255 * TERRAIN_WIDTH + i + 128].r = Terrain_seg[127 * TERRAIN_WIDTH + i + 128].r; |
| 1098 | Terrain_seg[255 * TERRAIN_WIDTH + i + 128].g = Terrain_seg[127 * TERRAIN_WIDTH + i + 128].g; |
| 1099 | Terrain_seg[255 * TERRAIN_WIDTH + i + 128].b = Terrain_seg[127 * TERRAIN_WIDTH + i + 128].b; |
| 1100 | } |
| 1101 | |
| 1102 | int w = lm_w(TerrainLightmaps[0]); |
| 1103 | |
| 1104 | for (i = 0; i < TERRAIN_DEPTH; i++) { |
| 1105 | for (t = 0; t < TERRAIN_WIDTH; t++) { |
| 1106 | int tseg = i * TERRAIN_WIDTH + t; |
| 1107 | terrain_segment *tp = &Terrain_seg[tseg]; |
| 1108 | int x = t % 128; |
| 1109 | int y = 127 - (i % 128); |
| 1110 | int which = ((i / 128) * 2) + (t / 128); |
no test coverage detected