OpenXcom Forum
Modding => Released Mods => XPiratez => Topic started by: tylor on May 14, 2017, 02:01:06 pm
-
I was thinking about vision model that woul make more sense. So, here it is.
There is two vision checks - one in normal spectrum, and another in infrared. Infrared one relies on thing's own thermal emission and does not require light.
Algorithm for calculating "obscureness" for normal vision (NV):
1. Start with 100%.
2. Add some number for insufficient light. It can be binary (as it is no), or scale with light levels below good. If target has Night Camo, this penalty is MULTIPLIED by Night Camo value.
3. If target has any (non-night-specific) Camo, add it's value too.
4. For every cell on sight line obscured by smoke and probably other obstacles (fire, windows, doors, bushes etc), add value proportional to number of obstacles and their "obstacleness".
5. Multiply it all by range.
6. If result is more than some threshold, target is invisible.
For Infrared Vision (IR), algorithm is similar, but there is no step 2, and value of Camo at step 3 and obstacleness of things at step 4 can be different. For example, smoke is worse at blocking IR than NV, and fire is better. Some camos can block only one type of vision, or one better than another.
-
Right now you can made something like that using visibility scripts (info from OXCE log file):
[03-04-2017_22-37-41] [DEBUG] Script info for: visibilityUnit
[DEBUG]
[DEBUG] Have global events
[DEBUG]
[DEBUG] Script return values:
[DEBUG] Name: current_visibility var int
[DEBUG] Name: visibility_mode var BattleUnitVisibility.Tag
[DEBUG]
[DEBUG] Script data:
[DEBUG] Name: current_visibility var int
[DEBUG] Name: default_visibility var int
[DEBUG] Name: distance int
[DEBUG] Name: distance_max int
[DEBUG] Name: fire_density int
[DEBUG] Name: observer_unit ptr BattleUnit
[DEBUG] Name: rules ptr RuleMod
[DEBUG] Name: smoke_density int
[DEBUG] Name: target_unit ptr BattleUnit
[DEBUG] Name: visibility_mode var BattleUnitVisibility.Tag
[DEBUG] To see const values and custom operations use 'verboseLogging'
Limitation is that unit can see other unit only in one "visibility model", you need choose witch you want use for given target.