Files
sfall/artifacts/example_mods/GetDrunk/Data/scripts/glbooze.ssl
T
2020-10-08 15:34:41 +08:00

113 lines
3.1 KiB
Plaintext

procedure start;
procedure GetBoozes;
procedure update_shader;
variable begin
perception;
boozes;
shader1;
shader2;
shader3;
shader4;
drunk_level;
next_reduction;
booze_pids;
end
procedure start begin
variable new_pe, new_booze, drunk_count;
if (metarule(22, 0)) then return; //is_loading_game
if (game_loaded) then begin
if (not graphics_funcs_available) then begin
display_msg("ERROR: You must set sfall to use graphics mode 4 or 5 to use this mod");
return;
end else begin
// pid list of the items for the mod to apply the effect
booze_pids := [/*124,*/ 125];
fix_array(booze_pids);
//new_pe := create_object_sid(125, 0, 0, -1);
//add_mult_objs_to_inven(dude_obj, new_pe, 10);
perception := get_pc_extra_stat(1);
boozes := GetBoozes;
set_global_script_repeat(50);
set_global_script_type(1);
shader1 := load_shader("booze1.fx");
shader2 := load_shader("booze2.fx");
shader3 := load_shader("booze3.fx");
shader4 := load_shader("booze4.fx");
//display_msg("Init: " + perception + ", " + boozes);
end
end else begin
new_pe := get_pc_extra_stat(1);
new_booze := GetBoozes;
if ((perception != new_pe) orElse (boozes != new_booze)) then begin
//display_msg("var change: " + perception + ", " + boozes + " -> " + new_pe + ", " + new_booze);
if ((perception > new_pe) andAlso (boozes > new_booze)) then begin
variable pe_diff := perception - new_pe;
variable booze_diff := boozes - new_booze;
if (pe_diff < booze_diff) then begin
drunk_count := pe_diff;
end else begin
drunk_count := booze_diff;
end
drunk_level += (drunk_count * 10);
//display_msg("Increasing booze count: " + drunk_level);
call update_shader;
next_reduction := game_time + game_ticks(6);
end
perception := new_pe;
boozes := new_booze;
end
if ((next_reduction != 0) andAlso (game_time >= next_reduction)) then begin
drunk_level -= 1;
if (drunk_level == 0) then
next_reduction := 0;
else
next_reduction += game_ticks(6);
call update_shader;
//display_msg("Decreasing booze count: " + drunk_level);
end
end
end
procedure GetBoozes begin
variable pid, count_booze := 0;
foreach (pid in booze_pids) begin
count_booze += obj_is_carrying_obj_pid(dude_obj, pid);
end
return count_booze;
end
procedure update_shader begin
if (drunk_level >= 100) then begin
deactivate_shader(shader1);
deactivate_shader(shader2);
deactivate_shader(shader3);
activate_shader(shader4);
end else if (drunk_level >= 50) then begin
deactivate_shader(shader1);
deactivate_shader(shader2);
activate_shader(shader3);
deactivate_shader(shader4);
end else if (drunk_level >= 25) then begin
deactivate_shader(shader1);
activate_shader(shader2);
deactivate_shader(shader3);
deactivate_shader(shader4);
end else if (drunk_level > 0) then begin
activate_shader(shader1);
deactivate_shader(shader2);
deactivate_shader(shader3);
deactivate_shader(shader4);
end else begin
deactivate_shader(shader1);
deactivate_shader(shader2);
deactivate_shader(shader3);
deactivate_shader(shader4);
end
end