Lights (Metroid Prime): Difference between revisions
Jump to navigation
Jump to search
→Format: Adding new info, marking stuff that isn't 100% certain as unknown because I suspect some of it is likely wrong
imported>Antidote No edit summary |
>Aruki (→Format: Adding new info, marking stuff that isn't 100% certain as unknown because I suspect some of it is likely wrong) |
||
Line 6: | Line 6: | ||
==Format== | ==Format== | ||
The header for the light section is extremely simple and consists of the magic | |||
The header for the light section is extremely simple and consists of the magic value <code>0xBABEDEAD</code>. It's then followed by two arrays of lights, each preceded by a light count. | |||
===Light=== | ===Light=== | ||
Each light is a 0x41-byte struct that consists of the following data: | |||
{| class="wikitable" | {| class="wikitable" | ||
! Offset | ! Offset | ||
! Type | ! Type | ||
! Description | ! Description | ||
! Notes | |||
|- | |- | ||
| 0x0 | | 0x0 | ||
| long | | long | ||
| '''Light Type''' | | '''Light Type''' | ||
| | |||
|- | |- | ||
| 0x4 | | 0x4 | ||
| float3 | | float3 | ||
| '''Light Color''' | | '''Light Color''' | ||
| | |||
|- | |- | ||
| 0x10 | | 0x10 | ||
| float3 | | float3 | ||
| '''Position''' | | '''Position''' | ||
| | |||
|- | |- | ||
| 0x1C | | 0x1C | ||
| float3 | | float3 | ||
| '''Direction''' | | '''Direction''' | ||
| | |||
|- | |- | ||
| 0x28 | | 0x28 | ||
| float | | float | ||
| ''' | | {{unknown|'''Unknown'''}} | ||
| Used as a color multiplier for local ambient, and used to calculate attenuation for spot/custom. | |||
|- | |- | ||
| 0x2C | | 0x2C | ||
| float | | float | ||
| '''Spot Cutoff | | '''Spot Cutoff''' | ||
| | |||
|- | |- | ||
| 0x30 | | 0x30 | ||
| float | | float | ||
| {{unknown|Unknown}} | | {{unknown|'''Unknown'''}} | ||
| | |||
|- | |- | ||
| 0x34 | | 0x34 | ||
| byte | | byte | ||
| '''Quadratic Cutoff''' | | '''Quadratic Cutoff''' | ||
| | |||
|- | |- | ||
| 0x35 | | 0x35 | ||
| float | | float | ||
| '''Light Factor | | '''Light Factor''' | ||
| | |||
|- | |- | ||
| 0x39 | | 0x39 | ||
| long | | long | ||
| ''' | | {{unknown|'''Unknown'''}} | ||
| Modifies how attenuation is calculated. Possible values range from 0-2. | |||
|- | |- | ||
| 0x3D | | 0x3D | ||
| float | | float | ||
| {{unknown|Unknown}} | | {{unknown|'''Unknown'''}} | ||
| | |||
|- | |- | ||
| 0x41 | | 0x41 | ||
| colspan= | | colspan=3 {{unknown|End of light}} | ||
|} | |} | ||
=== Light Types === | |||
The first value in each light is a type value. These are the possible values: | |||
{| class="wikitable" | |||
! Type | |||
! Name | |||
|- | |||
| 0x0 | |||
| Local Ambient | |||
|- | |||
| 0x1 | |||
| Directional | |||
|- | |||
| 0x3 | |||
| Spot | |||
|- | |||
| Other | |||
| Custom | |||
|} | |||
The game doesn't actually track separate light types internally; rather, each light type is a preset that only draws from a couple of the possible parameters. The Custom type is not a preset, and allows further control over how the light is set up. Custom lights are commonly found under type 0x2, acting as point/omni lights. | |||
[[Category:File Formats]] | [[Category:File Formats]] |