| 4766 | } |
| 4767 | |
| 4768 | void WriteTerrainSkyAndLightChunk(CFILE *fp) { |
| 4769 | int i; |
| 4770 | int max_sats; |
| 4771 | |
| 4772 | max_sats = Terrain_sky.num_satellites; |
| 4773 | |
| 4774 | int start_pos; |
| 4775 | start_pos = StartChunk(fp, CHUNK_TERRAIN_SKY); |
| 4776 | |
| 4777 | cf_WriteFloat(fp, Terrain_sky.fog_scalar); |
| 4778 | cf_WriteFloat(fp, Terrain_sky.damage_per_second); |
| 4779 | |
| 4780 | cf_WriteByte(fp, Terrain_sky.textured); |
| 4781 | |
| 4782 | cf_WriteShort(fp, Terrain_sky.dome_texture); |
| 4783 | |
| 4784 | cf_WriteInt(fp, Terrain_sky.sky_color); |
| 4785 | cf_WriteInt(fp, Terrain_sky.horizon_color); |
| 4786 | cf_WriteInt(fp, Terrain_sky.fog_color); |
| 4787 | |
| 4788 | cf_WriteInt(fp, Terrain_sky.flags); |
| 4789 | cf_WriteFloat(fp, Terrain_sky.radius); |
| 4790 | cf_WriteFloat(fp, Terrain_sky.rotate_rate); |
| 4791 | |
| 4792 | cf_WriteInt(fp, max_sats); |
| 4793 | |
| 4794 | for (i = 0; i < max_sats; i++) { |
| 4795 | cf_WriteShort(fp, Terrain_sky.satellite_texture[i]); |
| 4796 | cf_WriteVector(fp, &Terrain_sky.satellite_vectors[i]); |
| 4797 | cf_WriteByte(fp, Terrain_sky.satellite_flags[i]); |
| 4798 | cf_WriteFloat(fp, Terrain_sky.satellite_size[i]); |
| 4799 | |
| 4800 | cf_WriteFloat(fp, Terrain_sky.satellite_r[i]); |
| 4801 | cf_WriteFloat(fp, Terrain_sky.satellite_g[i]); |
| 4802 | cf_WriteFloat(fp, Terrain_sky.satellite_b[i]); |
| 4803 | } |
| 4804 | |
| 4805 | // Write lighting |
| 4806 | uint8_t *byte_vals = (uint8_t *)mem_malloc(TERRAIN_DEPTH * TERRAIN_WIDTH); |
| 4807 | |
| 4808 | // l |
| 4809 | for (i = 0; i < TERRAIN_DEPTH * TERRAIN_WIDTH; i++) |
| 4810 | byte_vals[i] = Terrain_seg[i].l; |
| 4811 | CheckToWriteCompressByte(fp, byte_vals, TERRAIN_DEPTH * TERRAIN_WIDTH); |
| 4812 | |
| 4813 | // r |
| 4814 | for (i = 0; i < TERRAIN_DEPTH * TERRAIN_WIDTH; i++) |
| 4815 | byte_vals[i] = Terrain_seg[i].r; |
| 4816 | CheckToWriteCompressByte(fp, byte_vals, TERRAIN_DEPTH * TERRAIN_WIDTH); |
| 4817 | |
| 4818 | // g |
| 4819 | for (i = 0; i < TERRAIN_DEPTH * TERRAIN_WIDTH; i++) |
| 4820 | byte_vals[i] = Terrain_seg[i].g; |
| 4821 | CheckToWriteCompressByte(fp, byte_vals, TERRAIN_DEPTH * TERRAIN_WIDTH); |
| 4822 | |
| 4823 | // b |
| 4824 | for (i = 0; i < TERRAIN_DEPTH * TERRAIN_WIDTH; i++) |
| 4825 | byte_vals[i] = Terrain_seg[i].b; |
no test coverage detected