-- Preconditions for Outro of STALKER: Call Of Pripyat (see game_tutorials->outro_game) -- 4a function skadovsk_bad_cond() return has_alife_info("kingpin_gained") end -- 4b function skadovsk_good_cond() return has_alife_info("one_of_the_lads_gained") end -- 4c function skadovsk_neutral_cond() return ( not has_alife_info("kingpin_gained") ) and ( not has_alife_info("one_of_the_lads_gained") ) end -- 5a function bloodsucker_live_cond() return not has_alife_info("zat_b57_bloodsucker_lair_clear") end -- 5b function bloodsucker_dead_cond() return has_alife_info("zat_b57_bloodsucker_lair_clear") end -- 6a function dolg_die_cond() return has_alife_info("sim_freedom_help_harder") end -- 6b function freedom_die_cond() return has_alife_info("sim_duty_help_harder") end -- 6c function dolg_n_freedom_cond() return ( not has_alife_info("sim_freedom_help_harder") ) and ( not has_alife_info("sim_duty_help_harder") ) end -- 7a function scientist_good_cond() return has_alife_info("research_man_gained") end -- 7b function scientist_bad_cond() return not has_alife_info("research_man_gained") end -- 8a function garik_good_cond() return has_alife_info("pri_a28_army_leaved_alive") end -- 8b function garik_bad_cond() return not has_alife_info("pri_a28_army_leaved_alive") end -- 9 function oasis_cond() return has_alife_info("jup_b16_oasis_artefact_to_scientist") end -- 10 function mercenarys_cond() return has_alife_info("pri_b35_task_running") end -- 11a function yanov_good_cond() return has_alife_info("mutant_hunter_achievement_gained") end -- 11b function yanov_bad_cond() return not has_alife_info("mutant_hunter_achievement_gained") end -- 12a function zuluz_good_cond() return has_alife_info("pri_b301_save_zulus_complete") end -- 12b function zuluz_bad_cond() return not has_alife_info("pri_b301_save_zulus_complete") end -- 13a function vano_good_cond() return has_alife_info("jup_a10_vano_agree_go_und") and has_alife_info("pri_a16_vano_was_alive_when_removed") end -- 13b function vano_bad_cond() return has_alife_info("jup_a10_vano_agree_go_und") and ( not has_alife_info("pri_a16_vano_was_alive_when_removed") ) end -- 14a function brodyaga_good_cond() return has_alife_info("jup_b218_monolith_hired") and has_alife_info("pri_a16_wanderer_was_alive_when_removed") end -- 14b function brodyaga_bad_cond() return has_alife_info("jup_b218_monolith_hired") and ( not has_alife_info("pri_a16_wanderer_was_alive_when_removed") ) end -- 15a function sokolov_good_cond() return has_alife_info("jup_b218_soldier_hired") and has_alife_info("pri_a28_sokolov_left_alive") end -- 15b function sokolov_bad_cond() return has_alife_info("jup_b218_soldier_hired") and ( not has_alife_info("pri_a28_sokolov_left_alive") ) end -- 16 function sich_cond() return has_alife_info("balance_advocate_gained") end -- 17 function noahs_ark_cond() return has_alife_info("zat_b18_noah_met") and ( not has_alife_info("zat_b18_noah_dead") ) end -- 18a function kardan_good_cond() return has_alife_info("zat_b44_tech_buddies_both_told") end -- 18b function kardan_bad_cond() return not has_alife_info("zat_b44_tech_buddies_both_told") end --19a function strelok_live_cond() return not has_alife_info("pri_a28_strelok_dead") end -- 19b function strelok_die_cond() return has_alife_info("pri_a28_strelok_dead") end -- 20a function kovalski_live_cond() return not has_alife_info("pri_a28_koval_dead") end -- 20b function kovalski_die_cond() return has_alife_info("pri_a28_koval_dead") end class "outro_sound" function outro_sound:__init() end function outro_sound:start() self.snd = sound_object("music\\outro") self.snd:play (nil, 0.0, sound_object.s2d) self:set_volume (1.0) end function outro_sound:stop() self.snd:stop () end function outro_sound:set_volume(vol) self.snd.volume = vol end function start_bk_sound() g_outro_sound = outro_sound() g_outro_sound:start() local hud = get_hud() hud:AddCustomStatic("blackscreen", true) xr_effects.disable_ui_only(db.actor, nil) end function stop_bk_sound() if g_outro_sound ~= nil then g_outro_sound:stop() end g_outro_sound = nil xr_effects.game_disconnect() xr_effects.game_credits()end volume_max = 1.0 volume_min = 0.3 function calc_fade(factor, fade1_pos, fade2_pos, fade1_volume, fade2_volume) local f = ((factor-fade1_pos)*(fade2_volume-fade1_volume))/(fade2_pos-fade1_pos) + fade1_volume local min_vol = 0.0 local max_vol = 1.0 if fade1_volume > fade2_volume then max_vol = fade1_volume min_vol = fade2_volume else max_vol = fade2_volume min_vol = fade1_volume end if f>max_vol then f = max_vol elseif f