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

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


DeKRuS

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

совсем старым под дос. если в скрипте нет sfall функций.

или руками это все можно выправить.

Я пробовал проблемный скрипт (depolva.int) декомпилировать из новых версий RPU от Бёрна, а обратно он не компилируется. Возможно ошибка при декомпиляции происходит?

 

А, как ручками поправить?)))

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

Я пробовал проблемный скрипт (depolva.int) декомпилировать из новых версий RPU от Бёрна, а обратно он не компилируется. Возможно ошибка при декомпиляции происходит?

 

А, как ручками поправить?)))

ну удалить и вместо этого правильно написать)))

дай проблемные скрипты не декомпилированные я исправлю.

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

На вскидку не вспомню, посмотри вот эти два: Ссыль

 

В hs_ondeath.int ругается на cell

В hs_ondeath.int  он рассматривает имя процедуры "ceil" как математическую функцию sfall, простое переименование в "ceil1" конечно позволяет скомпилится скрипту, но может потом приведет к каким проблемам. А вообще сама процедура ceil в этом скрипте это и есть получение округленного вверх числа через функцию floor и по большому счету нафиг не нужна, как мне кажется. а скрипт сильно старый? может он был написан когда в sfall ещё небыло округления в верх?

 

В скрипте depolva какаято херня с  "for (/* O_NOOP */; bot_rebuild_count < 17; bot_rebuild_count := bot_rebuild_count + 1)" ,  заменить это дело на:

 

while (bot_rebuild_count < 17) do begin

спавн ботов

и в самом конце:

bot_rebuild_count := bot_rebuild_count + 1;

 

по идеи должно работать)

 

Вот ссылка на твои теперь компилирующиеся декомпилированные скриты)

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

а скрипт сильно старый? может он был написан когда в sfall ещё небыло округления в верх?

15 года примерно, но раньше он нормально компилировался и декомпилировался. А на новых версиях sFallScriptEditor уже проблемы.

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

У меня тут затык с set_fake_perk_npc.

 

Как-то можно их добавить НПЦ которые не сопартийцы?  без такого:  

 

 hs_combatdamage
if dmgToTarget > 0 then begin
 
party_add(target);
set_fake_perk_npc(target,.,.);
party_remove(target);
critter_add_trait(target, TRAIT_OBJECT, OBJECT_TEAM_NUM, original_TEAM));
 
end
 

Может там планируют в след обновлении сфалла  "set_fake_perk_npc" для всех криттеров  сделать?)

 

Просто вариант с настоящими перками critter_add_trait(target, 0, Х, 1); добавляет перк не только целям но и игроку причем в количестве равном (кол-во целей + 1)

 

ну, если нет, то нет(

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

while (bot_rebuild_count < 17) do begin спавн ботов и в самом конце: bot_rebuild_count := bot_rebuild_count + 1;

или как и было

for (bot_rebuild_count = 0; bot_rebuild_count < 17; bot_rebuild_count++) then begin
...

добавлено через 34 сек.

Может там планируют в след обновлении сфалла "set_fake_perk_npc" для всех криттеров сделать?)

нет не планируется, потому что нельзя это делать.

добалять фак для обычного NPC (как ты делашь через черный обходной путь), вроде проблемы потом могут возникнуть.

Надо глянуть, какие последствия будут :)

добавлено через 43 сек.

Просто вариант с настоящими перками critter_add_trait(target, 0, Х, 1); добавляет перк не только целям но и игроку причем в количестве равном (кол-во целей + 1)

это всегда добавляет перк к игроку если цель-NPC не является партийцем. и то у партийцев перки неработают.

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

Хотел при помощи tile_in_tile_rect разбить зоны вокруг целей на подходящие для прицеливания по определенным конечностям, но в итоге сделал через rotation_to_tile :(

1.Почему при сторонах прямоугольника 11 и больше(а иногда даже и меньше) "tile_in_tile_rect(ul,ur,ll,lr,x)"   проводит проверку не по всей площади прямоугольника, а лишь на диагоналях выходящих из углов и на самих углах? ( если сторона меньше 9 то проверка проходит по всей площади прямоугольника, а не только на пересечениях линий выходящих из углов)  или это так и работает?)

 

примерные участки проверки отмечены полосками

 

212.png

 

 

2. Можно как-то получить номер тайла над или под целью не делая такую громоздкую конструкцию?

 "tile_num_in_direction(tile_num_in_direction(tile_num(target), 5, 1), 0 , 1 )" 

(тут он под номером 4)

 

221.png

 

[pluspost=48 сек.]

нет не планируется, потому что нельзя это делать.

добалять фак для обычного NPC (как ты делашь через черный обходной путь), вроде проблемы потом могут возникнуть.

Надо глянуть, какие последствия будут :)

Пока что проблемы были только с тем что иногда! убегающие криттеры теряли враждебность, да и к тому же проверка на наличие фак перков идет только у тех кто в пати. ( но вылетов не наблюдалось)

Так что нафиг эту идею)

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

1.Почему при сторонах прямоугольника 11 и больше(а иногда даже и меньше) "tile_in_tile_rect(ul,ur,ll,lr,x)"

не разу не пробывал данную, функцию (или пробовал но лет наверное 10-15 назад)

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

 

2. Можно как-то получить номер тайла над или под целью не делая такую громоздкую конструкцию?

неа.

была/есть в планах добавить функцию для получения гекса по X/Y координатам, но пока не хватает времении ее родить.

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

возможно получить математически:

получаем X и Y

цель_гекс / 200 = Y
цель_гекс % 200 = X

теперь чтобы получить требуемый гекс делаем так

Y -/+24 или X -/+32 (взависимости от направления)

потом так: Y*200 + X = гекс

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

"tile_in_tile_rect(ul,ur,ll,lr,x)" проводит проверку не по всей площади прямоугольника, а лишь на диагоналях выходящих из углов и на самих углах? ( если сторона меньше 9 то проверка проходит по всей площади прямоугольника, а не только на пересечениях линий выходящих из углов) или это так и работает?)

поковырялся в двиге более тщательно, вобщем порядок у функции такой:

tile_in_tile_rect(верхний_левый, верхний_правый, нижний_левый, нижний_правый, , x )

отмеченные курсивом углы вообще не проверяются движком (смыла нет их проверять).

так что функция нормально работает и проверяет, только по наркомански углы задаются.

И я из твоего описания/картинки ничего непонял, что у тебя там по диагонали проверяет.

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

поковырялся в двиге более тщательно, вобщем порядок у функции такой:

 

tile_in_tile_rect( верхний правый, верхний левый, нижний правый, нижний левый, x )

отмеченные курсивом углы вообще не проверяются движком (смыла нет их проверять).

так что функция нормально работает и проверяет, только по наркомански углы задаются.

И я из твоего описания/картинки ничего непонял, что у тебя там по диагонали проверяет.

 

Я сам не понял что за фигня у меня выходила, а после твоего ответа решил что надо получше разобраться.

Набросал на ночном дежурстве идею скрипта на листочке, что бы работа функции стала для меня нагляднее.

 

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

 

 

//скрипт при помощи англ. клавиши "К" первым нажатием устанавливает верхний левый угол(и спавнит в //нём стимулятор), вторым нажатием верхний левый(бутылка), третьим - нижний левый (бутылка), 4-ым - //нижний правый(стимулятор)

//пятое нажатие спавнит гранаты на всех тайлах входящим в зону проверки(возвращают true) и ещё

//обнуляет углы для повторной разметки прямоугольника.

 

 

#include "define_extra.h"

#include "define_lite.h"
#include "dik.h"
 
variable corners:=0;
   variable ul := 0;
   variable ur := 0;
   variable ll := 0;
   variable lr := 0;
 
procedure start;
procedure keypress;
 
procedure start begin
 
   if game_loaded then begin
      set_global_script_type(0);
      set_global_script_repeat(0);
      register_hook_proc(19, keypress);
      display_msg("tile_in_rect" );
   end
end
 
procedure max(variable x, variable y) begin
   if (x > y) then return x;
   return y;
end
 
procedure min(variable x, variable y) begin
   if (x < y) then return x;
   return y;
end
 
procedure keypress begin
   variable event:=get_sfall_arg;
   variable key:=get_sfall_arg;
   variable max0 := 0;
   variable min0 := 0;
   variable tile_in_rect := 0;
      if event == 1 then begin
      if key == DIK_K then begin
         if corners < 4 then begin
            if corners == 0 andAlso ul == 0 then begin
               ul := tile_under_cursor;
               display_msg("ul"+ ul );
               create_object(40, tile_under_cursor, dude_elevation);
            end
            if corners == 1 andAlso ul != 0 andalso ur==0 then begin
               ur := tile_under_cursor;
               display_msg("ur"+ ur );
               create_object(125, tile_under_cursor, dude_elevation);
            end
            if corners == 2 andAlso ul != 0 andalso ur!=0 andAlso ll==0 then begin
               ll := tile_under_cursor;
               display_msg("ll"+ ll );
               create_object(125, tile_under_cursor, dude_elevation);
            end
            if corners == 3 andAlso ul != 0 andalso ur!=0 andAlso ll!=0 andAlso lr==0 then begin
               lr := tile_under_cursor;
               display_msg("lr"+ lr );
               create_object(40, tile_under_cursor, dude_elevation);
            end
            corners+=1;
        end
        else begin
            max0 := MAX(MAX(ul, ur), MAX(ll, lr));
            min0 :=MIN(MIN(ul, ur), MIN(ll, lr));
            tile_in_rect := min0;
 
            while tile_in_rect < max0 do begin
               if tile_in_tile_rect(ul, ur,ll, lr, tile_in_rect) then
                  create_object(26, tile_in_rect, dude_elevation);
               tile_in_rect+=1;
            end
            corners := 0;
            ul := 0;
            ur := 0;
            ll := 0;
            lr := 0;
         end
      end
   end

end

 

 

 

Выяснилось что движок проверяет верхний правый и нижний левый углы, но только расстояние между ними (ну, еще расстояние между ними и центром линии соединяющий 2 другие вершины), на их расположение реально всё равно(!) и это расстояние потом используется для расчёта ширины прямоугольника. И да, сам прямоугольник рисуется между A и В  tile_in_tile_rect( А, верхний левый, нижний правый, В, x ) и В должен располагаться правее (на экране) чем А.

 

 

1. максимальная ширина(макс. расстояние между верх-прав и ниж-лев углами(бутылки).

 

scr00000.png

 

 

2.минимальная ширина(с обеих сторон).

 

scr00001.png

 

 

3. минимальная ширина снизу, максимальная ширина сверху.

 

scr00003.png

 

 

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

 

 

Крч, немного не то что я хотел от этой функции

 

P.S. И спасибо тебе, прям, ОГРОМНОЕ за то, что помогаешь в таком разобраться! 

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

Выяснилось что движок проверяет верхний правый и нижний левый углы, но только расстояние между ними (ну, еще расстояние между ними и центром линии соединяющий 2 другие вершины), на их расположение реально всё равно(!) и это расстояние потом используется для расчёта ширины прямоугольника. И да, сам прямоугольник рисуется между A и В tile_in_tile_rect( А, верхний левый, нижний правый, В, x ) и В должен располагаться правее (на экране) чем А.

 

Незнаю с чего ты взял что там что-то измеряется, в движке стоит одна единственная проверка

координатов X-гекса и точек A/B

if ( T.x <= верхний_левый.x &&
     T.x >= нижний_правый.x &&
     T.y >= верхний_левый.y &&
     T.y <= нижний_правый.y )
{
  rvalue = 1; // T-гекс в прямоугольнике A B
}

проверил твой скрип все правильно работает.

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

непонятно в чем у тебя была трабла.

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

Незнаю с чего ты взял что там что-то измеряется, в движке стоит одна единственная проверка координатов X-гекса и точек A/B

Да это всё по глупости) только сейчас понял что мой способ проверки САМ учитывал два других угла, а не движ (facepalm). Ещё раз всё попробовал, но уже с подправленным скриптом и конечно же в игре учитываются только верхний_левый и нижний_правый углы.

 

непонятно в чем у тебя была трабла.

Изначально проблема была в недостатке моих знаний. Я подумал что прямоугольник строится по всем 4 углам и может быть любой симметричной формы и в итоге у меня получилось вот такое:

 

Я задал углы двум прямоугольникам, один внутри другого. Но я не знал что каждый из них получился толщиной в 1 гекс, и в итоге tile_in_tile_rect, выдавал true в раномных(как мне казалось) тайлах и то только по диагоналям,  ну и я решил что фигня какаято с функцией, а оказалось что это со мной беда :)

 

scr00005.png

 

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

"Прицельные промахи" - ничего интересного, просто это крик души, когда прицеливаясь в глаза с 95% меткости, 2 выстрела подряд промахиваются, а на 3й раз оружие взрывается к херам!
Вот потому и обозвал так простой скрипт который восстанавливает справедливость)

Он с небольшой(до 5%) вероятностью переводит промах при прицельном выстреле в попадание по соседней части тела.

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

А также добавил площади для зоны в которой при промахе может быть выбрана новая случайная цель для получения урона от проджектайла.

 

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

 



newarea2.png

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

Обновил скрипты исправил баги и добавил пару новых фич.

 

Отравление/регенерация:

- Исправлена ошибка, из-за которой персонаж умирал при входе на глобальную карту, если базовая скорость восстановления была увеличена до более чем 5 при помощи save editora.

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

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

 

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

- Добавлен включаемый/отключаемый шанс попасть по соседним частям тела при успешном не прицельном попадании. 70% в тело, 11% в ноги, 9% в руки, пах - 7%, голова  - 3% (и 2% из этих 3% попадут в глаза, если цель будет стоять лицом к атакующему).

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

шанс попасть по соседним частям тела при успешном не прицельном попадании

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

такая механика хороша для перка.

 

попадут в глаза, если цель будет стоять лицом к атакующему

конкреный просчет дизайнеров оригинального движка, ведь нельзя попасть в глаза если цель стоит задом)

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

конкреный просчет дизайнеров оригинального движка, ведь нельзя попасть в глаза если цель стоит задом)

в область на уровне глаз.


А на счет осечек не думали?

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

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

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

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

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

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

прострел черепа со спины с попаданием в глаз?)

или облет вокруг черепа))

первый вариант ближе, стрельба по тыкве в затылок на уровне глаз

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

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

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

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

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

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

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

И баланс тоже страдает, особенно с фаст шотом, поэтому это включается отдельно. И вообще это больше для врагов дополнение, а то у них ни меткости, ни интеллекта для обычных прицельных выстрелов)

 

первый вариант ближе, стрельба по тыкве в затылок на уровне глаз

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

 

Кстати, может кто из вас знает есть ли всё таки разница в статах(дамаг, меткость, крит) между анимацией swing/thrust у ножей? или может кто уже сделал мод с такими изменениями?

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

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

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

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

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

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

Войти

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

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

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