Rainman
Пользователь
Posts: 69
|
|
Re: Почему local_var(0) устанавливается в "-3" ?
« Reply #10 on: 18 November 2010, 01:11:03 » |
|
Успользуемый для проверки скрипт (перечисленные заголовки не имеют никакого отношения к заголовкам и макросам Фоллаута)
#include "J:\Developement\Scripts\headers\OLYMPUS.h" #include "J:\Developement\Scripts\headers\OLITEMS.h" #include "J:\Developement\Scripts\HEADERS\OLCRITRS.h" #include "J:\Developement\Scripts\HEADERS\OLGVARS.h"
#define scrid 3 // script's ID, line number in "scripts.lst"
#define LVAR_start ( 6 ) #define LVAR_enemy ( 7 ) #define LVAR_home_tile ( 8 )
procedure start; procedure timed_event_p_proc; procedure critter_p_proc; procedure combat_p_proc; procedure description_p_proc; procedure look_at_p_proc; procedure pickup_p_proc; procedure talk_p_proc; procedure destroy_p_proc; procedure use_skill_on_p_proc; procedure damage_p_proc; procedure push_p_proc;
procedure DialogStart; procedure Node999; procedure Node998; procedure map_enter_p_proc; procedure patrol;
procedure start begin if local_var(LVAR_start) == 0 then begin set_local_var(LVAR_start, 1); set_local_var(0, 1); set_local_var(1, 1); set_local_var(2, 1); set_local_var(3, 1); set_local_var(4, 1); set_local_var(5, 1); end end
procedure timed_event_p_proc begin if fixed_param == 1 then begin animate_move_obj_to_tile(self_obj, tile_num_in_direction(self_tile, 5, 10), 0); add_timer_event(self_obj, 90, 2); end if fixed_param == 2 then begin animate_move_obj_to_tile(self_obj, local_var(LVAR_home_tile), 0); add_timer_event(self_obj, 90, 1); end end
procedure map_enter_p_proc begin display_msg("LVAR_0 = " + local_var(0)); display_msg("LVAR_1 = " + local_var(1)); display_msg("LVAR_2 = " + local_var(2)); display_msg("LVAR_3 = " + local_var(3)); display_msg("LVAR_4 = " + local_var(4)); display_msg("LVAR_5 = " + local_var(5)); end
procedure critter_p_proc begin end
procedure combat_p_proc begin display_msg("LVAR_0 = " + local_var(0)); display_msg("LVAR_1 = " + local_var(1)); display_msg("LVAR_2 = " + local_var(2)); display_msg("LVAR_3 = " + local_var(3)); display_msg("LVAR_4 = " + local_var(4)); display_msg("LVAR_5 = " + local_var(5)); end
procedure look_at_p_proc begin //script_overrides; end
procedure description_p_proc begin //script_overrides; //set_local_var(LVAR_home_tile, self_tile); //add_timer_event(self_obj, 10, 1); display_msg("LVAR_0 = " + local_var(0)); display_msg("LVAR_1 = " + local_var(1)); display_msg("LVAR_2 = " + local_var(2)); display_msg("LVAR_3 = " + local_var(3)); display_msg("LVAR_4 = " + local_var(4)); display_msg("LVAR_5 = " + local_var(5)); end
procedure pickup_p_proc begin //script_overrides; set_enemy_on; display_msg("LVAR_0 = " + local_var(0)); display_msg("LVAR_1 = " + local_var(1)); display_msg("LVAR_2 = " + local_var(2)); display_msg("LVAR_3 = " + local_var(3)); display_msg("LVAR_4 = " + local_var(4)); display_msg("LVAR_5 = " + local_var(5)); end
procedure push_p_proc begin set_local_var(LVAR_home_tile, self_tile); add_timer_event(self_obj, 10, 1); display_msg("LVAR_0 = " + local_var(0)); display_msg("LVAR_1 = " + local_var(1)); display_msg("LVAR_2 = " + local_var(2)); display_msg("LVAR_3 = " + local_var(3)); display_msg("LVAR_4 = " + local_var(4)); display_msg("LVAR_5 = " + local_var(5)); end
procedure talk_p_proc begin display_msg("LVAR_0 = " + local_var(0)); display_msg("LVAR_1 = " + local_var(1)); display_msg("LVAR_2 = " + local_var(2)); display_msg("LVAR_3 = " + local_var(3)); display_msg("LVAR_4 = " + local_var(4)); display_msg("LVAR_5 = " + local_var(5)); start_gdialog(scrid, self_obj, 4, -1, -1); gSay_Start; display_msg("LVAR_0 = " + local_var(0)); display_msg("LVAR_1 = " + local_var(1)); display_msg("LVAR_2 = " + local_var(2)); display_msg("LVAR_3 = " + local_var(3)); display_msg("LVAR_4 = " + local_var(4)); display_msg("LVAR_5 = " + local_var(5)); call DialogStart; gSay_End; end_dialogue; end
procedure use_skill_on_p_proc begin display_msg("LVAR_0 = " + local_var(0)); display_msg("LVAR_1 = " + local_var(1)); display_msg("LVAR_2 = " + local_var(2)); display_msg("LVAR_3 = " + local_var(3)); display_msg("LVAR_4 = " + local_var(4)); display_msg("LVAR_5 = " + local_var(5)); end
procedure damage_p_proc begin display_msg("LVAR_0 = " + local_var(0)); display_msg("LVAR_1 = " + local_var(1)); display_msg("LVAR_2 = " + local_var(2)); display_msg("LVAR_3 = " + local_var(3)); display_msg("LVAR_4 = " + local_var(4)); display_msg("LVAR_5 = " + local_var(5)); end
procedure destroy_p_proc begin display_msg("LVAR_0 = " + local_var(0)); display_msg("LVAR_1 = " + local_var(1)); display_msg("LVAR_2 = " + local_var(2)); display_msg("LVAR_3 = " + local_var(3)); display_msg("LVAR_4 = " + local_var(4)); display_msg("LVAR_5 = " + local_var(5)); end
procedure DialogStart begin gSay_Reply(scrid, 1); gSay_Option(scrid, 2, Node998, 50); gSay_Option(scrid, 3, Node998, 50); end
procedure Node999 begin display_msg("LVAR_0 = " + local_var(0)); display_msg("LVAR_1 = " + local_var(1)); display_msg("LVAR_2 = " + local_var(2)); display_msg("LVAR_3 = " + local_var(3)); display_msg("LVAR_4 = " + local_var(4)); display_msg("LVAR_5 = " + local_var(5)); end
procedure Node998 begin set_enemy_on; display_msg("LVAR_0 = " + local_var(0)); display_msg("LVAR_1 = " + local_var(1)); display_msg("LVAR_2 = " + local_var(2)); display_msg("LVAR_3 = " + local_var(3)); display_msg("LVAR_4 = " + local_var(4)); display_msg("LVAR_5 = " + local_var(5)); end
procedure patrol begin end
To Wasteland Ghost: проверил изменение нулевой переменной при случае, когда НПС убегает от чузена(после надевания чузеном брони), сохранял, загружал, выходил из игры в главное меню и в Windows - ничего не меняется: нулевая лвара остается "-3", все остальные не меняются (если НПС по каким-то причинам перехотел нападать на чузена, то после загрузки, даже со значением local_var(0) == -3 он не хочет атаковать чузена). Как использовать нулевую вару? Ничего полезного на ум не приходит, может быть, это просто аппендикс от Ф1, который второму фоллауту вовсе без надобности...
To Fakels: "...я привел возможную версию для чего она меняется т.е. для макросов из MODREACT.h" - не думаю, это было бы просто бессмысленно. В этих макросах лвара 0 имеет те же права, что и лвары 1, 2 и 3, и меняются они, как ты уже сказал, макросами, т.е. - скриптово, и подключать сюда движок было бы просто нецелесообразно (по макросам видно, что лвара 0 содержит степень отношения НПС к чузену, которая может быть от -4 до 4 включительно, и зачем бы БИС'овцам потребовалось хардкодить промежуточное значение???)
Мое заключение: движково local_var(0) может принимать значение "-3", которое не противоречит скриптам, которые используют local_var(0), но и не дополняет эти скрипты специфичными функциями, что означает, что БИС'овцам хардкод этой лвары в движке был не нужен, но и не мешал, поэтому (если local_var(0) действительно использовалась в движке Ф1) эту функцию движка fallout2.exe просто не стали трогать и оставили как есть. Если у вас есть еще мысли по этому поводу - предлагаю обсудить (очень жаль, что не удалось получить никаких изменений local_var(5)...)
|