Compare commits
	
		
			3 Commits
		
	
	
		
			4abe815220
			...
			d144a1c805
		
	
	| Author | SHA1 | Date | 
|---|---|---|
|  | d144a1c805 | |
|  | c01502f218 | |
|  | 96bca0fac7 | 
|  | @ -4,9 +4,15 @@ | |||
| 
 | ||||
| // TODO: All these types should be enums lol | ||||
| 
 | ||||
| enum ObjectType : u8 { | ||||
|     Static, | ||||
|     Rotating, | ||||
|     Sliding, | ||||
| }; | ||||
| 
 | ||||
| struct Object { | ||||
|     char name[8]; | ||||
|     u8 type; | ||||
|     ObjectType type; | ||||
|     s32 parameter; | ||||
|     float min_range; | ||||
|     float max_range; | ||||
|  | @ -41,8 +47,19 @@ struct AuxMaterialInfo { | |||
|     } | ||||
| }; | ||||
| 
 | ||||
| enum VHotId : u32 { | ||||
|     LightPosition = 1, | ||||
|     LightDirection = 8, | ||||
|     Anchor = 2, | ||||
|     Particle1 = 3, | ||||
|     Particle2 = 4, | ||||
|     Particle3 = 5, | ||||
|     Particle4 = 6, | ||||
|     Particle5 = 7, | ||||
| }; | ||||
| 
 | ||||
| struct VHot { | ||||
|     u32 id; | ||||
|     VHotId id; | ||||
|     Vec3<float> location; | ||||
| }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -28,6 +28,7 @@ | |||
| #include "db_files/chunks/HotRegions.hexpat" | ||||
| #include "db_files/chunks/L$_.hexpat" | ||||
| #include "db_files/chunks/LD$_.hexpat" | ||||
| #include "db_files/chunks/LM_PARAM.hexpat" | ||||
| #include "db_files/chunks/MAPISRC.hexpat" | ||||
| #include "db_files/chunks/Mission_GameSysEAX.hexpat" | ||||
| #include "db_files/chunks/MultiBrush.hexpat" | ||||
|  |  | |||
|  | @ -66,6 +66,7 @@ struct TOCEntry { | |||
|         ("FOGZONEVAR"): Chunk<FogZoneVar> fog_zone_var @ offset; | ||||
|         ("GameSysEAX"): Chunk<AccousticsProperty> gamesys_eax @ offset; | ||||
|         ("HotRegions"): Chunk<HotRegions> hot_regions @ offset; | ||||
|         ("LM_PARAM"): Chunk<LmParams> lm_params @ offset; | ||||
|         ("MAPISRC"): Chunk<MapISrc> map_i_src @ offset; | ||||
|         ("MissionEAX"): Chunk<AccousticsProperty> mission_eax @ offset; | ||||
|         ("MultiBrush"): Chunk<MultiBrush> multibrush @ offset; | ||||
|  | @ -92,11 +93,9 @@ struct TOCEntry { | |||
|             } | ||||
|             else if (std::string::starts_with(name, "LD$")) { | ||||
|                 Chunk<LinkDataChunk> link_data @ offset [[name(name)]]; | ||||
|                 // std::print("LD: {}", name); | ||||
|             } | ||||
|             else if (std::string::starts_with(name, "L$")) { | ||||
|                 Chunk<LinkMap> link_chunk @ offset [[name(name)]]; | ||||
|                 // std::print("L: {}", name); | ||||
|             } | ||||
|             else { | ||||
|                 std::print("Didn't load chunk: {}", name); | ||||
|  |  | |||
|  | @ -0,0 +1,17 @@ | |||
| #pragma once | ||||
| 
 | ||||
| #include "Common.hexpat" | ||||
| 
 | ||||
| struct LmParams { | ||||
|     u32 unknown1; // I think this is struct size (seemingly always 36) | ||||
|     float attenuation; | ||||
|     float saturation; | ||||
|     u32 shadow_type; // TODO: Enum | ||||
|     u32 softness; // TODO: Enum | ||||
|     float center_weight; | ||||
|     u32 depth_mode; // TODO: Enum (16, 32, 32-2x) | ||||
|     bool lightmapped_water; | ||||
|     padding[3]; | ||||
|     s32 lightmap_scale; | ||||
|     u32 animlight_cutoff; | ||||
| }; | ||||
|  | @ -19,6 +19,7 @@ using WrLightMapDataPixel; | |||
| using WrBspTree; | ||||
| using WrBspTreeNode; | ||||
| using WrBspTreeCellPlane; | ||||
| using WrCellWeather; | ||||
| using WrLightTable; | ||||
| using WrLightTableData; | ||||
| using WrLightTableAnimLight; | ||||
|  | @ -32,7 +33,7 @@ struct WrExt { | |||
|     WrHeader header; | ||||
|     WrCell cells[header.cell_count]; | ||||
|     WrBspTree bsp_tree; | ||||
|     padding[header.cell_count]; // This is suspicious. Fog? SEE VFIGS MISSDEEDS!! | ||||
|     WrCellWeather weather[header.cell_count]; | ||||
|     WrLightTable lights; | ||||
|     WrCsgCellTable csg_cell_table; | ||||
| }; | ||||
|  | @ -147,7 +148,9 @@ struct WrLightMap { | |||
| 
 | ||||
|     u32 count = 1 + std::bit::popcount(parent.p_light_list[i].anim_light_bitmask); | ||||
|     u32 bytes_per_pixel = parent.parent.header.bytes_per_pixel; | ||||
|     WrLightMapLayer layers[count]; | ||||
|     // WrLightMapLayer layers[count]; | ||||
|     // u8 pixels[count * width * height * bytes_per_pixel]; | ||||
|     padding[count * width * height * bytes_per_pixel]; | ||||
| }; | ||||
| 
 | ||||
| struct WrLightMapLayer { | ||||
|  | @ -178,6 +181,11 @@ struct WrBspTreeCellPlane { | |||
|     s32 plane_id; | ||||
| }; | ||||
| 
 | ||||
| bitfield WrCellWeather { | ||||
|     fog_zone : 4; // No fog and fog zone 0 share a value. Cells have flags & 64 if they're foggy | ||||
|     ambient_zone : 4; | ||||
| }; | ||||
| 
 | ||||
| struct WrLightTable { | ||||
|     s32 light_count; | ||||
|     s32 dynamic_light_count; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue