Перейти к содержанию

Мод: Fallout 2 Mechanics Mini Rework. Переделка части геймплейных механик


DeKRuS

Рекомендуемые сообщения

Всё равно не то.

Собственно, удар по затылку как раз-таки может ослепить человека, а вот как это в игре... скорей всего, не играет роли, задницей к вам повернут персонаж или передницей (хотя, могу ошибаться). 

Fallout 2Путеводитель по модам | FAQ | Перевод модов | Путеводитель по RP

Nevada Band: Путеводитель по играм серииFAQ

Fallout Tactics: Путеводитель по модам | FAQ

База Данных: YD\YD\MF

Помогая другим, не забывай о себе =) 

Ссылка на комментарий

Собственно, удар по затылку как раз-таки может ослепить человека, а вот как это в игре... скорей всего, не играет роли, задницей к вам повернут персонаж или передницей (хотя, могу ошибаться)

Именно что будет корковый амавроз, из-за поражения затылочной доли не через глазницу, где обычно меньше "брони",  чем на других частях головы(особенно в шлеме), а значит и урон должен быть другой, хоть и оба с вероятностью ослепления, но такого в игре нет.

 

нет разницы. вроде никто неделал.

Понятно, спасибо.

Ссылка на комментарий

Ну, писец, случайно узнал что если не поставить "SkipOpeningMovies=2" то часть моего скрипта, срабатывает через жопь. 

 

Исходные условия: пустая карта с игроком и одним спутником, к ним применен drug который повышает healing_rate на +6 на 1 минуту. После отдыха через пипбой (время отдыха не имеет значение) получается разный результат в зависимости от значения "SkipOpeningMovies" в ddraw.ini.

 

Под спойлером обрубок из моего скрипта, работающий через "HOOK_RESTTIMER".

В зависимости от того что стоит в ddraw.ini  в SkipOpeningMovies, он выдаёт мне разный результат!

И я пока не могу понять почему. 

 

 

procedure rest begin
   variable critter_array := 0;
   variable theonecrit := 0;
   variable theonecrit2 := 0;
   variable lastdudehr := 0;
   RegenTickHP2 := 0;
//часть с регеном
   if RegenMod != 0    then begin
      foreach (critter in list_as_array(0)) begin
         if not(is_in_array(critter,healingcritarray)) andAlso get_critter_stat(critter, STAT_heal_rate ) > 5 then begin
         healingcritarray := array_push(healingcritarray,critter);
         end
      //remove from array critter with hr < 5
         if is_in_array(critter,healingcritarray) andAlso get_critter_stat(critter, STAT_heal_rate ) < 5 then begin
         healingcritarray := remove_array_set(healingcritarray,critter);
         end
         theonecrit := array_min(healingcritarray);
         theonecrit2 := array_max(healingcritarray);
         //display_msg(obj_name(theonecrit));
            if critter == theonecrit andAlso critter == theonecrit2 then begin
            display_msg("no poison "+obj_name(theonecrit));
            end
      end
   end
//часть с ядом
   if PoisonMod != 0 andAlso get_critter_stat(critter, STAT_current_hp ) > 0   then begin
      foreach (critter in list_as_array(0)) begin
               if not(is_in_array(critter,healingcritarray))  andAlso get_critter_stat(critter, STAT_heal_rate ) > 5  then begin
               healingcritarray := array_push(healingcritarray,critter);
               end
               theonecrit := array_max(healingcritarray);
               if critter == theonecrit then begin
               display_msg(" poison "+obj_name(theonecrit));
               end
            //remove from array critter with hr < 5
               if is_in_array(critter,healingcritarray) andAlso get_critter_stat(critter, STAT_heal_rate ) < 5 then begin
               healingcritarray := remove_array_set(healingcritarray,critter);
               end
            end
   end
   clear_array(healingcritarray);
   healingcritarray := create_array_map;
 end

 

 

 

 

Под спойлерами скриншоты информационного экрана из игры:

 

Если SkipOpeningMovies= 1 или 0, то выводится такой результат(мне такого ненужно)

 

skip0-1.png

 

 

а если SkipOpeningMovies= 2  то выводится другой, нужный мне результат.

 

skip2.png

 

 

 

Если в скрипте в части с ядом поменять  

theonecrit := array_MAX(healingcritarray); на  theonecrit := array_MIN(healingcritarray);

То всё меняется местами и нужный мне результат процедура теперь выдает если стартовые мувики не скипаются!

 

 

Мистер Сталин, выручай! 

я реально не понимаю как это всё может быть связанно?

И что на самом деле делает SkipOpeningMovies? 

 

(я  в свою поделку уже добавил проверку скипа интро и замену макс на мин, если он не равен 2, чтобы хоть как-то работало, но это же выглядит бредово!)

Ссылка на комментарий

Че за бред ты придумал с SkipOpeningMovies, ищи баг а не выдумывай ерунду.

SkipOpeningMovies=2 - просто не рисуется картинка при старте игры, вместо нее черный экран.[pluspost=12 сек.]Проверь там display_msg(" poison "+obj_name(theonecrit));

Действительно ли theonecrit указывает на неправильный криттер. Пид выводи.

Ссылка на комментарий

Согласен, звучит как полный бред! Да и выглядит также!

Понятное дело это баг, но почему он возникает только когда SkipOpeningMovies=0 или 1, а при значении 2 всё работает как надо? 

 

И я просто не могу понять как SkipOpeningMovies может быть связан с работай скрипта?

 

Конечно тут сразу ответ, что никак не связан, но почему тогда так получается?

 

 

[pluspost=1 сек.]

Проверь там display_msg(" poison "+obj_name(theonecrit));
Действительно ли theonecrit указывает на неправильный криттер. Пид выводи.

Да, obj_pid выводит также как и obj_name. 

когда не скип, то обе кричи 16777217

в другом случае 16777217 и 16777313

Ссылка на комментарий

в каком месте 16777313

Если SkipOpeningMovies=2, то выходит вот так

 

skip2-pid.png

 

 

Если SkipOpeningMovies=0 или 1, то так

 

skip0-1-pid.png

 

 

Такие странные результаты выдаются только если игрок тоже в массив попадает, если в массиве только НПЦ, то всё работает как надо, в не зависимости от значения SkipOpeningMovies.  

Проверял на чистой установке F2 Fixed edition, версия sfall 4.3.0.2- extended, на других не проверял.

 

UPD:

Попробовал на FE Nevada и Sonora, там такого не случается. (оригинальная + 4.3.3.1 версии sfall)

 

На F2 Fixed edition если обновить сфалл до 4.3.3.1 с заменой ddraw.ini, ничего не меняется и результат всё также зависит от значения SkipOpeningMovies.

Ссылка на комментарий

Проверял на чистой установке F2 Fixed edition, версия sfall 4.3.0.2- extended, на других не проверял.

проверь с какой именно версии sfall это началось.

подкинь например 4.2.9 и уходи вниз может на какой-то номально будет. а там я уже разберусь.

 

[pluspost=4 сек.]

Попробовал на FE Nevada и Sonora, там такого не случается. (оригинальная + 4.3.3.1 версии sfall)

 

На F2 Fixed edition если обновить сфалл до 4.3.3.1 с заменой ddraw.ini, ничего не меняется и результат всё также зависит от значения SkipOpeningMovies.

упс то еcть на одной верии sfall, но на разных играх, разное/баговое поведение?

Ссылка на комментарий

"упс то еcть на одной верии sfall, но на разных играх, разное/баговое поведение?"

Не, наоборот, на одной версии игры (F2 FE) с разными версиями сфалл 4.3 и нове (и экстендед версия и обычная), получается такое поведение.

Но теперь есть подозрение может всё так и должно быть, ну, или я опять факапнул проверку.

При проверке я начинал новую игру, но в F2 я после начала сохранился и все тестировал на этом сэйве. А в соноре и Неваде, проверял каждый раз начиная новую игру, но без загрузок сейвов.


У меня в скрипте пустой Array_map создаётся в стартовой процедуре. Может если сохранить игру при одном значении SkipOpeningMovies, а загрузить при другом, то только тогда такое разное поведение случается?

Как дома буду ещё посмотрю.

 

UPD:

С загрузками и сохранением никакой связи не оказалось.

Но нашлась другая более вероятная причина.

                                                                                 Verte!

Ссылка на комментарий

Пока что смог получить вот что:

- На чистой установке Fallout 2 Fixed Edition v3.8.1 это странное поведение есть. 

- На чистой установке Fallout Nevada FE v2.0.3 это странное поведение ТОЖЕ есть! но ТОЛЬКО если запускать игру через NevadaHD_FE.exe. При запуске через Nevada.exe то всё работает всегда одинаково вне зависимости от значения SkipOpeningMovies.

 

Когда увидел что на Неваде такое тоже есть, но только на ехе у которого Hi Res включен, то решил еще раз поставить  сфалл 4.3.3.1 на чистую Fallout 2 Fixed Edition v3.8.1 и в этот раз отключить Hi Res.
И о чудо! теперь результаты работы скрипта никак не зависят от значения SkipOpeningMovies!

 

 

скрины из невады при запуске через NevadaHD_FE.exe. 

 

Если SkipOpeningMovies=0 или 1, то так:

 

Nev-skip-0-1.png

 

 

А если SkipOpeningMovies=2, то пишет так:

 

nev-skip-2.png

 

 

Получаются зеркальные результаты, если сравнивать с F2 FE.

 

Выходит что такие странности  могут быть как-то связаны с Hi Res патчем или конкретно  ехе'шниками Fixed Edition. Но каким именно образом это всё связано?

И как тогда такого избежать?

 

Вот тут текст скрипта которым проверял всё:

 

 

#define SFALL_SC_EVALUATION (true) // short - circuit evaluation

#include "E:\Fallout Tools Pack\sFall_Script_Editor\scripts\HEADERS\DEFINE.H"
#include "E:\Fallout Tools Pack\sFall_Script_Editor\scripts\HEADERS\define_extra.h"
#include "E:\Fallout Tools Pack\sFall_Script_Editor\scripts\HEADERS\lib.arrays.h"

procedure start;
procedure rest;
procedure map_enter_p_proc;

variable critter;
variable healingcritarray;
variable stim;

procedure start begin
if (game_loaded) then begin
set_pipboy_available(1);
register_hook_proc(HOOK_RESTTIMER, rest);
set_global_script_type(3);
stim := create_object_sid(40, 0, 0, -1);
add_mult_objs_to_inven(dude_obj, stim, 6);
healingcritarray := create_array_map;
call map_enter_p_proc();
end
end

procedure rest begin
variable critter_array := 0;
variable theonecrit := 0;
variable theonecrit2 := 0;
variable lastdudehr := 0;
foreach (critter in list_as_array(0)) begin
if not(is_in_array(critter,healingcritarray)) andAlso get_critter_stat(critter, STAT_heal_rate ) > 5 then begin
healingcritarray := array_push(healingcritarray,critter);
end
//remove from array critter with hr < 5
if is_in_array(critter,healingcritarray) andAlso get_critter_stat(critter, STAT_heal_rate ) < 5 then begin
healingcritarray := remove_array_set(healingcritarray,critter);
end
theonecrit := array_min(healingcritarray);
theonecrit2 := array_max(healingcritarray);
//display_msg(obj_name(theonecrit));
if critter == theonecrit andAlso critter == theonecrit2 then begin
display_msg("no poison "+obj_pid(theonecrit));
end
end
if get_critter_stat(critter, STAT_current_hp ) > 0 then begin
foreach (critter in list_as_array(0)) begin
if not(is_in_array(critter,healingcritarray)) andAlso get_critter_stat(critter, STAT_heal_rate ) > 5 then begin
healingcritarray := array_push(healingcritarray,critter);
end
theonecrit := array_max(healingcritarray);
if critter == theonecrit then begin
display_msg(" poison "+obj_pid(theonecrit));
end
//remove from array critter with hr < 5
if is_in_array(critter,healingcritarray) andAlso get_critter_stat(critter, STAT_heal_rate ) < 5 then begin
healingcritarray := remove_array_set(healingcritarray,critter);
end
end
end
clear_array(healingcritarray);
healingcritarray := create_array_map;
end

procedure map_enter_p_proc begin
set_proto_data(40, PROTO_DR_STAT_A, -2);
set_proto_data(40, PROTO_DR_STAT_B, 35);
set_proto_data(40, PROTO_DR_STAT_C, 14);
set_proto_data(40, PROTO_DR_AMOUNT_1_A, 1);
set_proto_data(40, PROTO_DR_AMOUNT_1_B, 6);
set_proto_data(40, 56, 6);
set_proto_data(40, 60, 1);
set_proto_data(40, 64, 0);
set_proto_data(40, 68, 0);
set_proto_data(40, 72, -8);
set_proto_data(40, 76, 60);
set_proto_data(40, 80, 0);
set_proto_data(40, 84, 0);
set_proto_data(40, 88, 2);
end

 

 


Полезные ссылки:

Ссылка на комментарий

NevadaHD_FE.exe. При запуске через Nevada.exe

Попробуйка имена одного и тогоже exe с 8 символов и 11 символов в имени.

 

Nevada.exe 6 символов сойдет для теста и переименуй в Nevada12345.exe для второго теста, хотя скорей всего проблема в hrp mash

 

И как тогда такого избежать?

Для начала надо выяснить точно где проблема, hrp, sfall, движок, имя exe, кривой реплейс иконки. Пока что всё указывает на hrp mash. Это крайне серьёзный баг, из-за него куча нехороших правок могло попасть в rpu/ettu
Ссылка на комментарий

Попробуйка имена одного и тогоже exe с 8 символов и 11 символов в имени.

Изменение имени eхе ничего не дало(

 
А вот запуск игры в окне (в f2_res.ini поставить WINDOWED=1), убирает зависимость от пропуска стартовых мувиков.
С WINDOWED_FULLSCREEN такой фокус не прошёл, помогает только запуск в окне.
А вот WIN_DATA может быть любая, на результат не влияет.
 
Надо будет проверить на другом пк, а то вдруг это косяк только у меня встречается.
 
Заставил друга проверить у себя: на мегамоде v2.44.3 скрипт также выдает разные значения и как только включаешь оконный режим вся зависимость от SkipOpeningMovies пропадает и результат работы скрипта становится всегда одинаковым.
Изменено пользователем DeKRuS
Ссылка на комментарий

Уточняйте какой именно - их уже два. тот который старый? тогда переключитесь но встроенный и проверьте.

Уже проверял)  и со встроенным в sfall патчем такого не возникает.

 

Когда увидел что на Неваде такое тоже есть, но только на ехе у которого Hi Res включен, то решил еще раз поставить  сфалл 4.3.3.1 на чистую Fallout 2 Fixed Edition v3.8.1 и в этот раз отключить Hi Res. И о чудо! теперь результаты работы скрипта никак не зависят от значения SkipOpeningMovies!

 

 

 

Ну очевидно что надо удалять f2_res.dll и использовать встроенный в sfall hrp

Жаль только что в новой версии туман войны не будут никогда реализовывать.

 

Но всё равно остался вопрос:

- Почему в Неваде и в Ф2, уже после отключение старого hrp, оидн и тот же скрипт может выдавать разные результаты? На одной и той же версии сфалл с одинаковыми настройками в ини, кроме SkipSizeCheck=1 в неваде.

 

в простом Ф2 скрипт работает циклично и в окно выдает такой текст.

 

scr00001.png

 

 

 

А в неваде такой:

 

scr00005.png]scr00004.png

 

Изменено пользователем DeKRuS
Ссылка на комментарий

Уже проверял)  и со встроенным в sfall патчем такого не возникает.

может во внешнем просто включена опция которая глючит с sfall, там есть такие сомнительные устаревшие опции.

[pluspost=24 сек.]

Жаль только что в новой версии туман войны не будут никогда реализовывать.

добавлю но не скоро (к концу года может быть), но затемнения самой карты не будет)

[pluspost=6 сек.]

- Почему в Неваде и в Ф2, уже после отключение старого hrp, оидн и тот же скрипт может выдавать разные результаты?

блин тебя не понять то ты пишешь, что после отключения HRP все нормально, и тут же пишешь что после отключения по разному....

ты уж определись)))

 

так какой вариант правильный в F2 или в неваде? а то по скринщотам с цифрами не понятно.

[pluspost=5 сек.]

Прилипи сюда этот скрипт я у себя проверю. че там за странное поведение.

Ссылка на комментарий

Не всмвсле что нормально,а в смысле что без связи со скипом мувиков)

 

Кидаю с телефона, поэтому сорян что без спойлера

 

#define SFALL_SC_EVALUATION (true) // short - circuit evaluation

 

#include "E:\Fallout Tools Pack\sFall_Script_Editor\scripts\HEADERS\DEFINE.H"

#include "E:\Fallout Tools Pack\sFall_Script_Editor\scripts\HEADERS\define_extra.h"

#include "E:\Fallout Tools Pack\sFall_Script_Editor\scripts\HEADERS\lib.arrays.h"

 

procedure start;

procedure rest;

procedure map_enter_p_proc;

 

variable critter;

variable healingcritarray;

variable stim;

 

procedure start begin

if (game_loaded) then begin

set_pipboy_available(1);

register_hook_proc(HOOK_RESTTIMER, rest);

set_global_script_type(3);

stim := create_object_sid(40, 0, 0, -1);

add_mult_objs_to_inven(dude_obj, stim, 6);

healingcritarray := create_array_map;

call map_enter_p_proc();

end

end

 

procedure rest begin

variable critter_array := 0;

variable theonecrit := 0;

variable theonecrit2 := 0;

variable lastdudehr := 0;

foreach (critter in list_as_array(0)) begin

if not(is_in_array(critter,healingcritarray)) andAlso get_critter_stat(critter, STAT_heal_rate ) > 5 then begin

healingcritarray := array_push(healingcritarray,critter);

end

//remove from array critter with hr < 5

if is_in_array(critter,healingcritarray) andAlso get_critter_stat(critter, STAT_heal_rate ) < 5 then begin

healingcritarray := remove_array_set(healingcritarray,critter);

end

theonecrit := array_min(healingcritarray);

theonecrit2 := array_max(healingcritarray);

//display_msg(obj_name(theonecrit));

if critter == theonecrit andAlso critter == theonecrit2 then begin

display_msg("no poison "+obj_pid(theonecrit));

end

end

if get_critter_stat(critter, STAT_current_hp ) > 0 then begin

foreach (critter in list_as_array(0)) begin

if not(is_in_array(critter,healingcritarray)) andAlso get_critter_stat(critter, STAT_heal_rate ) > 5 then begin

healingcritarray := array_push(healingcritarray,critter);

end

theonecrit := array_max(healingcritarray);

if critter == theonecrit then begin

display_msg(" poison "+obj_pid(theonecrit));

end

//remove from array critter with hr < 5

if is_in_array(critter,healingcritarray) andAlso get_critter_stat(critter, STAT_heal_rate ) < 5 then begin

healingcritarray := remove_array_set(healingcritarray,critter);

end

end

end

clear_array(healingcritarray);

healingcritarray := create_array_map;

end

 

procedure map_enter_p_proc begin

set_proto_data(40, PROTO_DR_STAT_A, -2);

set_proto_data(40, PROTO_DR_STAT_B, 35);

set_proto_data(40, PROTO_DR_STAT_C, 14);

set_proto_data(40, PROTO_DR_AMOUNT_1_A, 1);

set_proto_data(40, PROTO_DR_AMOUNT_1_B, 6);

set_proto_data(40, 56, 6);

set_proto_data(40, 60, 1);

set_proto_data(40, 64, 0);

set_proto_data(40, 68, 0);

set_proto_data(40, 72, -8);

set_proto_data(40, 76, 60);

set_proto_data(40, 80, 0);

set_proto_data(40, 84, 0);

set_proto_data(40, 88, 2);

end

 

 

Метод проверки: начать новую игру или загрузить любой сейв, применить стимпак на игрока и на 1 криттера, затем начать отдых(время не важно, хватит и 10 мин)

Ссылка на комментарий

готовый скрип дай копилировать не хочу

[pluspost=31 сек.]

#include "E:\Fallout Tools Pack\sFall_Script_Editor\scripts\HEADERS\lib.arrays.h"

вот это вот фуфло случаем не глючит)

я бы этим не пользовался. слишком громоздкие  устаревшие конструкции

это еще писалось при "ленине" годах так в 12х.

Ссылка на комментарий

Крч, я разобрался как именно получаются разные результаты, но уверен что точно не смогу понять причину)

 

Вот так теперь выглядит проблемный скрипт:

procedure start begin
      if (game_loaded) then begin
      set_pipboy_available(1);
      register_hook_proc(HOOK_RESTTIMER, rest);
      end
end
procedure rest begin
      foreach (critter in list_as_array(0)) begin
      display_msg("critter=" + critter +" Pid=" + obj_pid(Critter));
      end
end
 
и что же тут такое меняется если поменять значение SkipOpeningMovies?
 
На примере Ф2 FE. Скрип выводит пид и указатель на объект-криттер(?) если не стоит пропуск мувиков/оконный режим.

skip-0-1.png

а это то же самое, но уже с включенным пропусков мувиков/оконным режимом.

skip-2.png

 
Оказалось что меняется "critter", точнее то что я даже не знаю как называется, указатель на обьект?
 
Когда SkipOpeningMovies=2 или отключен hrp или включен оконный режим, то это число в "foreach (critter in list_as_array(0))" для НПЦ начинается с 5, а для игрока с 2.
А когда SkipOpeningMovies=0/1, то это число в "foreach (critter in list_as_array(0))" для НПЦ и игрока начинается с 2, но у игрока оно всегда меньше(проверял всего по 4 раза в начальной деревне и 2 раза в кламате, считаю что проверок было мало, так что не исключено, что картина может меняться).
от других показателей я такую зависимость не увидел.
В неваде игрок начинется на 4, а НПЦ на 2, если SkipOpeningMovies=0/1. а когда SkipOpeningMovies=2, то игрок начинается на 2 и НПЦ тоже начинаются на 2(у меня игрок был меньше по номеру, стоял и с разных краёв карты и между нпц и добавлял других нпц, результат был такойже).
 
Причем такая зависимость только с SkipOpeningMovies, другие значения в ddraw.ini не меняют начальную цифру. ( ну или недостаточно пристально проверял) 
 
- Так воооот это нормальное и ожидаемое поведение или это не совсем нормально и может помешать работе не только моего "васянского мода"?
 
- И есть ли какая-то закономерность в том какой номер получит криттер когда пробегаешь по всем криттерам через "foreach (critter in list_as_array(0))"?
Ссылка на комментарий

Оказалось что меняется "critter", точнее то что я даже не знаю как называется, указатель на обьект?

это (указатель на память где лежат данные криттера) и должно меняться, это не нужно выводить на экран или даже пихать в массивы если не временно (до выхода с карты).

[pluspost=59 сек.]

- И есть ли какая-то закономерность в том какой номер получит криттер когда пробегаешь по всем криттерам через "foreach (critter in list_as_array(0))"?

по сути рандом, зависит от многих факторов, сколько у тебя свободной памяти.

в общем значение неопределяются какими-то правилами.

Ссылка на комментарий

по сути рандом

Как мы видим, не совсем рандом. Может стоит добавить псевдорандомизацию принудительно для всех скриптовых указателей? Или наоборот причесать их чтобы были предсказуемы всегда. Херня это все, а не баг.
Ссылка на комментарий
Вернулся из отпуска и решил уже доделать эти скрипты)

 

Мод на восстановление здоровья:

- Добавлен бонусный перк "Регенерация", который автоматически добавляется игроку, если базовая "скорость восстановления" будет больше 5, позволяющий с шансом, зависящим от "скорости восстановления", исцелять травмы конечностей при тиках лечения, как в бою так и вне боя.

- Изменена механика лечения Суперстимулятором.


Суперстимулятор восстанавливает до 60 hp, при этом временно уменьшая  "скорость восстановления" в зависимости от фактически восстановленого hp.

Если количество лечения превышает доступную "скорость восстановления", то через минуту СС наносит урон.


Урон от последействия СС теперь зависит от количества фактически восстановленного здоровья и доступной на момент применения "скорости восстановления". (если СС применен к существу без повреждений или с очень высокой "скоростью восстановления" и низкими повреждениями, то урон наносится не будет.)

Также теперь Суперстимулятор лечит сломанные конечности(как игроку, так и НПЦ), при этом увеличивая штраф к  "скорости восстановления", а следовательно и возможный урон от последействия, и немного снижая количество восстанавливаемых ХП, в зависимости от количества и вида травм.

-Наличие трейта "Ускоренный метаболизм" увеличивает эффективность лечения и снижает штрафы накладываемые стимулятором и суперстимулятором.

-Усилено воздействие скорости лечения на количество восстанавливаемого здоровья.

- Добавлены "всплывающие цифры" с лечением над существом (лечение - зеленым цветом, урон от яда - красным, сумарный урон+лечение - синим)(только в режиме боя).

 

Мод механики яда:

- Добавлен перк "Консервация яда" доступный с 6 уровня и требующий науку 50+ либо навык натуралиста выше 70.

Перк увеличивает количество максимально наносимого яда на оружие и количество применений ядовитой железы радскорпиона.

Уменьшает шанс потерять стаки яда при атаке отравленным оружием и скорость потери стаков яда пока оружие не активно.

Добавляет отравление при стрельбе боеприпасами для инъектора.


- Добавлены "всплывающие цифры" с уроном ядом над существом (лечение - зеленым цветом, урон от яда - красным, сумарный урон+лечение - синим)(только в режиме боя).

 


 

Прицельные промахи:


Добавлена опция для изменения эффекта при атаке ножом в зависимости от анимации атаки (резать/колоть), работает как у игрока, так и у НПЦ:

-Резать:

уменьшает КБ цели на величину, равную (ловкость цели + (навык оружия ближнего боя атакующего/15)).

По слабо бронированным целям взмах ножом с большей вероятностью нанесет максимальный урон, а не минимальный.

-Колющая атака ножом:

Пробивает часть DR и DT цели в зависимости от максимального урона ножа и бонусного урона в ближнем бою атакующего, а также увеличивает шанс критического удара в 1,5 раза от базового шанса(без учета бонуса от прицельных атак).

 

Ссылка на комментарий

4. Можно ли уменьшить длительность медикаментов ниже 1 игровой минуты(12 ходов)? любые дробные значения в duration_time не приводят к результату

Сегодня заметил что при наличии трейта "Chem Resistant" минимальное действие препаратов на игрока становится 30 сек, если в прото файле или в скрипте прописано 1 мин, а значит должен быть способ уменьшить время ещё сильнее и возможно не только для игрока.

Нигде не нашёл похожих тем, не на русском, не на англ. языке. В крючках, оригинальных скриптах Ф2 и оп кодах я тоже не нашёл ничего что могло объяснить как можно уменьшить время действия. Решил что плохо искал или это возможно где-то в движке прописано?

 

Крч, кончилось тем что я уже второй час пытаюсь разобраться в ассемблере и там мало что понятно (видимо для этого надо быть программистом), но всё ж смог добиться минимальной длительности препаратов в 15 секунд вот таким очень как мне кажется страшным способом:

 

В свой скрипт в HOOK_USEOBJON я написал такие строчки   
   if read_int(0x479BD4) != 280509755 then begin
   write_int(0x479BD4,280509755);
   end
   if read_int(0x479BE8) != -288292236 then begin
   write_int(0x479BE8,-288292236);
   end
   if objpid == PID_STIMPAK then begin
      write_int(0x479BD4,read_int(0x479BEA ));
      write_int(0x479BE8,read_int(0x479BEA ));
   end

 

28.png

 

если посмотреть на картинку то:

вероятно по первому выделенному мной адресу(479BD4) происходит проверка является ли цель dude_objем (в  скрипте при применении стимулятора строчка заменяется на значение зеленой строчки и это делит время действия на 2)

затем заменяю значение по адресу второй красной строчки(479BE8) на тот же выделенный зелёным сдвиг в право и получаю уменьшение времени действия в 4 раза, с 1 минуты до 15 секунд.

Ну, а если применятся не стимулятор, а любой другой предмет, то этим адресам, если они были изменены, возвращается их исходное значение.

 

А теперь вопросы)

1.Можно ли так использовать "write_int" или это очень опасно? я видел как переписывают значения в "Pure data", а вот для "Pure code" в чужих скриптах я примеров не нашёл.

2.Как узнать или просчитать все возможные осложнения такого метода?

3.Есть ли другие, более простые способы уменьшить минимальное время действия препаратов?

 

А ещё я опять не смог подружится со старым Hi Res патчем)

Когда включен туман войны то при использовании команды critter_dmg цель в половине случаев становится нивидимой до конца анимации урона/смерти. 

Может кто знает как такое исправить приключённом тумане?  phobos2077 в 2014 году задавал такой же вопрос, но на eng форуме ему не ответили.

Ссылка на комментарий

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...