Перейти к содержимому


Фотография

(sfall) дополнения


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 1246

#561 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 24 сентября 2016 - 22:17

QUOTE (Fakeman)
да блин, мне не у DUDE флаг нужен.
Вот и используй нужный тебе ObjectPtr вместо dude_obj.

QUOTE (Fakeman)
Это Не верно!
Если поставить на карту объект, то
Инициализируется начальными битами всё так же из pro'шника именно по смещению 0x14.
QUOTE (Fakeman)
потом хоть как ты меняй флаг в pro, он на карте так и останется с таким каким его туда поставили
Потом — да.

QUOTE (Fakeman)
Ну нету же там понятия String или Integer.
Да ладно :-p
CODE
В описаниях функций компилятора приняты следующие обозначения:
.....
Тип_возвращаемого_значения:
void - неопределённый тип (функция не возвращает никакого значения)
int - целочисленный тип
unsigned int - целочисленный беззнаковый тип
ObjectPtr - указатель на объект
string или char* - символьная строка
boolean - логическая переменная (TRUE или FALSE)

lex.h:
CODE
typedef struct {
  int token; /* token we just parsed */
  int type;  /* will be either T_INT, T_FLOAT, T_STRING, or T_SYMBOL */
  union {
     char *stringData;
     int   intData;
     float floatData;
  };
} LexData;


QUOTE (Fakeman)
чего значит это 509? -это твое счастливое число, почему не 404)
Типа того, и 404 тоже весёленькое.

QUOTE (Fakeman)
То есть вместо dude можно подставить другой указатель на объект?
Верно.


#562 Fakeman

Fakeman

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 557 сообщений

Отправлено 25 сентября 2016 - 19:30

QUOTE (Ты)

QUOTE (Я)
Ну нету же там понятия String или Integer.

Да ладно :-p

Так это тип который возвращается функцией, мы же когда определяем переменную в скрипте не пишем какого типа данные она будет содержать.
ну во общем, я так понял там с твоей стороны тех.проблемы преобразования из инт в стринг.
509 — т.е. это константа?

Отправлено: 25 сен 16 19:45
QUOTE
boolean — логическая переменная (TRUE или FALSE)

var:=true;
var:=1;
if var...
там в движке между boolean и int есть какая либо разница в использовании?

Это сообщение отредактировано Fakeman - 25 сентября 2016 | 19:58


#563 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 25 сентября 2016 - 21:02

QUOTE (Fakeman)
Так это тип который возвращается функцией, мы же когда определяем переменную в скрипте не пишем какого типа данные она будет содержать.
Но компилятор генерирует код исходя из типа обрабатываемых данных. И движок потом обрабатывает переменную исходя из её текущего типа.

QUOTE (Fakeman)
ну во общем, я так понял там с твоей стороны тех.проблемы преобразования из инт в стринг.
Глупости-то какие :-p

QUOTE (Fakeman)
var:=true;
var:=1;
if var...
там в движке между boolean и int есть какая либо разница в использовании?
lex.c:
CODE
lexAddConstant(C_TRUE, "true", T_INT, 1);
lexAddConstant(C_FALSE, "false", T_INT, 0);


#564 Foxx

Foxx

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 120 сообщений

Отправлено 26 сентября 2016 - 00:07

QUOTE (Fakeman)
Кстати прицельный в тело вроде как дает какой-то бонус? не в курсе где про это написано)
QUOTE (Crafty)
У него нет штрафа, а это бонус

По моему, при прицельном выстреле в любую часть тела (даже торс) — дается 5% шанс нанести критическое повреждение. Или я не прав?
Хотел ещё спросить: кроме torso в ddraw.ini есть ещё BodyHit_Uncalled — это что за часть тела?)


#565 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 26 сентября 2016 - 14:09

QUOTE (Foxx)
По моему, при прицельном выстреле в любую часть тела (даже торс) — дается 5% шанс нанести критическое повреждение. Или я не прав?
Хотел ещё спросить: кроме torso в ddraw.ini есть ещё BodyHit_Uncalled — это что за часть тела?)
О выборе части тела для НПС писал выше, для ГГ же, если его атака прицельная, то возвращается та часть тела, в противном случае Body_Uncalled. Далее (некоторые детали я пропущу):
CODE
1. Определить "шанс_попадания" в часть тела (учитываются штрафы).
2. Замена Body_Uncalled на Body_Torso.
3. min = "шанс_попадания", max = get_critter_stat(source, STAT_crit_chance) - штраф.
4. Определить "тип попадания" (roll_check(min, max)), результат равен 0-3 (ROLL_CRITICAL_FAILURE-ROLL_CRITICAL_SUCCESS).
5. Потом "тип попадания" может поменяться, к примеру с ROLL_SUCCESS на ROLL_CRITICAL_SUCCESS если это ГГ использующий UNARMED/MELEE и у него взят перк Slayer/Смертельный удар. Ну и т.д.

Пример: у ГГ 8% шанс на крит, 33% шанс попадания в глаза (штраф -60):
min = 33, max = 8 — (-60) = 68.
"тип попадания" = roll_check(33, 68) = 3 = ROLL_CRITICAL_SUCCESS.
QUOTE
Хулио получает критическое ранение (глаза), теряет здоровье (- 54), и этот резкий удар ослепляет его.
Хулио  умирает.

Вот из-за второго пункта по-хорошему BodyHit_Uncalled нужно удалить из ini, потому что если его значение не совпадает с BodyHit_Torso, то это не торт.

PS. На всякий, вот так определяется "тип попадания" (roll_check(min, max)):
CODE
min := min - random(1,100);
if min < 0 then begin
 result := ROLL_FAILURE;
 if ((game_time/ONE_GAME_DAY) >= 1) and (random(1,100) <= (-min/10)) then begin
  result := ROLL_CRITICAL_FAILURE;
 end
end
else begin
 result := ROLL_SUCCESS;
 if ((game_time/ONE_GAME_DAY) >= 1) and (random(1,100) <= (min/10 + max)) then begin
  result := ROLL_CRITICAL_SUCCESS;
 end
end
return result;
С помощью переменной RemoveCriticalTimelimits можно отключить проверку первого дня.

Это сообщение отредактировано Crafty - 26 сентября 2016 | 14:58


#566 Fakeman

Fakeman

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 557 сообщений

Отправлено 26 сентября 2016 - 18:42

QUOTE
refresh_pc_art

А есть что-то подобное, только для криттера/карты?


#567 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 26 сентября 2016 - 19:19

QUOTE (Fakeman)
А есть что-то подобное, только для криттера/карты?
Для криттера:
CODE
metarule3(107, who, obj_art_fid(who), 0); // art_change_fid_num(who, obj_art_fid(who));
Для карты попробуй:
CODE
call_offset_v0(0x4B12D8); // tile_refresh_display_


#568 Fakeman

Fakeman

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 557 сообщений

Отправлено 26 сентября 2016 - 20:37

QUOTE
art_change_fid_num(who, obj_art_fid(who));

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

QUOTE
Базовый PROTO — файл партийца, у которого повышаются уровни, ДОЛЖЕН быть упакован в master.dat. Иначе уровень будет все время сбрасываться до базового прошника.

Может еще вот это глянешь, или там все сложно).

Это сообщение отредактировано Fakeman - 26 сентября 2016 | 20:40


#569 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 27 сентября 2016 - 01:51

QUOTE (Fakeman)
QUOTE
Базовый PROTO — файл партийца, у которого повышаются уровни, ДОЛЖЕН быть упакован в master.dat. Иначе уровень будет все время сбрасываться до базового прошника.
Может еще вот это глянешь, или там все сложно).
Не улавливаю суть, давай попроще на примере Вика (у меня с ним сейв есть, убиваю пару гекко и он апается) ;)


#570 Fakeman

Fakeman

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 557 сообщений

Отправлено 27 сентября 2016 - 02:15

QUOTE
на примере Вика (у меня с ним сейв есть, убиваю пару гекко и он апается)

а где находится его базовый прошник?
может это уже исправили, или вообще это миф)
нафига тогда RP упаковывает прошки в дат?

Это сообщение отредактировано Fakeman - 27 сентября 2016 | 02:17


#571 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 27 сентября 2016 - 03:07

QUOTE (Fakeman)
а где находится его базовый прошник?
PID_VIC = 16777278 (00000062.pro), PID_VIC_STAGE1-PID_VIC_STAGE6 = 16777589-16777594 (00000373.pro-00000378.pro).

QUOTE (Fakeman)
может это уже исправили, или вообще это миф)
У меня Вик второго уровня, ну я подсунул в data\proto\critters\ вместо 00000375.pro переименованный 00000378.pro и с атрибутом read-only — при апе получаю статы 6 уровня. Вот и не улавливаю суть проблемы ;-p

QUOTE (Fakeman)
нафига тогда RP упаковывает прошки в дат?
Чтобы не заморачиваться с установкой read-only, не? ;)


#572 Foxx

Foxx

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 120 сообщений

Отправлено 27 сентября 2016 - 08:59

QUOTE (Fakeman)
нафига тогда RP упаковывает прошки в дат?
QUOTE (Crafy)
Чтобы не заморачиваться с установкой read-only, не? ;)
RP упаковывает только начальные (базовые) прошки напарников, которые редактировались:
00000079.pro
00000089.pro
00000107.pro
00000502.pro
00000503.pro
00000504.pro


#573 Fakeman

Fakeman

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 557 сообщений

Отправлено 27 сентября 2016 - 08:59

Нет, там упаковываются именно базовый кессади и робомозга и еще какието новые партийцы. Остальные просто в папке дата с R/O
Положи базовый вика 62.pro в дата.
Может это будет справидливо только для новой игры, тогда вик несможет апнуться, а так он у тебя уже 2 ур...
Я сам никогда не проводил эксперементы с этими партийцами, возможно, что это как и с древним мифом TeamX о локальной переменной #5 которая как бы дижковая, я давно еще решил полезть и проверить это дело оказалось, что нифига она не движковая, а движковой оказалась вообще нулевая. Тут тоже наверное надо самому все перепроверить. :)


#574 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 28 сентября 2016 - 00:13

QUOTE
Базовый PROTO — файл партийца, у которого повышаются уровни, ДОЛЖЕН быть упакован в master.dat. Иначе уровень будет все время сбрасываться до базового прошника.
Разобрался, формулировка сбила с толку.

На примере Вика суть такова: его базовый прошник 00000062.pro (и он всегда используется из-за PID_VIC=16777278), а уровни хранятся в 00000373.pro-00000378.pro (но у них другие pid'ы). При получении уровня новые данные (все статы и скиллы) копируются в базовый прошник заменяя собою старые и сохраняя новый базовый прошник в master_patches (data\proto\critters\00000062.pro), а при записи игры в сейвслоте (data\savegame\slot#\proto\critters\00000062.pro), ну а при загрузке восстанавливается в master_patches. Соответственно, если в master_patches есть базовый прошник с read-only, то новые данные не сохраняются и всегда используются из этого базового прошника (потому что движок сначала ищет в master_patches, а потом в master_dat). И уровень не сбрасывается, потому что данные о уровне сопартийцев хранятся в другом месте, а не в их базовых прошниках.

Вывод:
QUOTE
Базовый PROTO-файл партийца, у которого повышаются уровни, НЕ ДОЛЖЕН быть в master_patches (data\proto\critters\) с атрибутом read-only, а должен быть упакован в master.dat. Иначе статы и скиллы будут всё время сбрасываться до базового прошника.


#575 Fakeman

Fakeman

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 557 сообщений

Отправлено 28 сентября 2016 - 00:48

Ясненько)
QUOTE (Crafty)
Вывод:
Базовый PROTO-файл партийца, у которого повышаются уровни, НЕ ДОЛЖЕН быть в master_patches (data\proto\critters\) с атрибутом read-only, а должен быть упакован в master.dat.

Каким образом это можно побороть?)
А если эти измененные базовые прошки упаковывать в patch.dat, двиг его от туда будет брать, или все равно из master.dat?
QUOTE
(потому что движок сначала ищет в master_patches, а потом в master_dat).

patch.dat — высший приоритет же имеет.
если это не так то может поправишь чтоб хобя из patch.dat брал.
хотя фиг его знает, нужна ли эта поправка или нет.

Это сообщение отредактировано Fakeman - 28 сентября 2016 | 00:54


#576 Foxx

Foxx

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 120 сообщений

Отправлено 28 сентября 2016 - 17:11

Crafty, у тебя в новой версии SFALL2 написано маленькими буквами sfall2, но в игре выглядит как 8fall2. Или мне так кажется))


#577 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 28 сентября 2016 - 20:07

Удалил из ini переменную NumberPatchLoop, теперь эффект включения постоянный с движковым лимитом 1000 (000-999).

QUOTE (Fakeman)
А если эти измененные базовые прошки упаковывать в patch.dat, двиг его от туда будет брать, или все равно из master.dat?
Будет брать там, где найдёт первым. Эффект от базовых прошек в patch###.dat такой же как и от этих прошек в master_patches с атрибутом read-only, то есть после левелапа будет откат на базовые статы и скиллы.

Пример для старой версии с patch001.dat, patch002.dat (но без использования NumberPatchLoop) и подключённым HRP, который добавляет в цепочку каталогов/dat-файлов f2_res.dat и каталог "data\" (Предположение что master_patches всегда указывает на "каталог_игры\data\"? А если будет, к примеру, "левый_каталог\data1\"...).
После инициализации цепочка выглядит так:
CODE
"patch002.dat" -> master_patches -> critter_dat -> "data\" -> "f2_res.dat" -> master_dat

QUOTE (Fakeman)
если это не так то может поправишь чтоб хобя из patch.dat брал.
хотя фиг его знает, нужна ли эта поправка или нет.
Очень даже нужна, и именно так и должен был быть сделан способ с patch###.dat.
Сейчас в новой версии после инициализации цепочка с примером выше выглядит так:
CODE
master_patches -> critter_patches -> "patch002.dat" -> "patch001.dat" -> critter_dat -> "data\" -> "f2_res.dat" -> master_dat
Ну и бонус — если critter_patches и master_patches одинаковые, то critter_patches из цепочки будет удалён.

QUOTE (Foxx)
но в игре выглядит как 8fall2. Или мне так кажется))
Шрифт, да и не смертельно :-p

Это сообщение отредактировано Crafty - 30 сентября 2016 | 22:48


#578 Fakeman

Fakeman

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 557 сообщений

Отправлено 28 сентября 2016 - 20:57

Ничего не понял)
QUOTE
Будет брать там, где найдёт первым. Эффект от базовых прошек в patch###.dat такой же как и от этих прошек в master_patches с атрибутом read-only, то есть после левелапа будет откат на базовые статы и скиллы.

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

в patch.dat у файлов нет никаких read-only и двиг же должен его распаковать в master_patches(т.е в DATA) и записать данные в него, или он напрямую в patch.dat пишет?
и что если patch.dat является папкой, а не архивом?

Сделай вывод, а то ничего не понятно)
Ладно я уже понял, что ты исправил это дело.
а как на счет того чтобы сфалл свои скрипты брал из папки на которую указывал master_patches, а то он всегда берет из Data.

QUOTE
Ну и бонус — если critter_patches и master_patches одинаковые, то critter_patches из цепочки будет удалён.

Ээээ, тут как бы бессмысленно использовать разные пути.
CODE
Чтобы сохраненки работали, нужно чтобы critter_patches и master_patches указывали на одну и ту же директорию!


Это сообщение отредактировано Fakeman - 28 сентября 2016 | 22:40


#579 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 28 сентября 2016 - 23:38

QUOTE (Fakeman)
Почему откат, ведь если
В оригинальной формулировке patch.dat не упоминался и его использование конечно же вносит дополнительные требования. Примерно так для оригинальной игры:
QUOTE
Базовый прошник партийца, у которого повышаются уровни, НЕ ДОЛЖЕН быть упакован в patch###.dat или быть в master_patches\proto\critters\ с атрибутом read-only, а должен быть упакован в master_dat. Иначе статы и скиллы будут всё время сбрасываться до базового прошника.

QUOTE (Fakeman)
в patch.dat у файлов нет никаких read-only и двиг же должен его распаковать в master_patches(т.е в DATA) и записать данные в него, или он напрямую в patch.dat пишет?
Движок может только читать файлы из .dat-архива.

QUOTE (Fakeman)
Сделай вывод, а то ничего не понятно)
Базовый прошник партийца, у которого повышаются уровни, НЕ ДОЛЖЕН быть в master_patches\proto\critters\ с атрибутом read-only, а должен быть упакован в patch###.dat или master_dat (при этом версия в patch###.dat приоритетнее версии в master_dat). Иначе статы и скиллы будут всё время сбрасываться до базового прошника.

QUOTE (Fakeman)
а как на счет того чтобы сфалл свои скрипты брал из папки на которую указывал master_patches, а то он всегда берет из Data.
Ага, надо будет поправить, и для gl* и для hs_*.

QUOTE (Fakeman)
Ээээ, тут как бы бессмысленно использовать разные пути.
Речь о другом ;) Без этого "бонуса" новая развёрнутая цепочка выглядит так (для простоты без patch.dat и HRP):
CODE
"D:\Games\Fallout2\data" -> "D:\Games\Fallout2\data" -> "D:\Games\Fallout2\critter.dat" -> "D:\Games\Fallout2\master.dat"
И при поиске, к примеру, 00000062.pro, который есть только в master_dat, файл дважды будет искаться в "D:\Games\Fallout2\data".
В оригинале так и происходит:
QUOTE
"D:\Games\Fallout2\data" -> "D:\Games\Fallout2\critter.dat" -> "D:\Games\Fallout2\data" -> "D:\Games\Fallout2\master.dat"
А нет, приврал — в движке уже есть проверка на одинаковые имена.

Переменные critter_patches и master_patches используются только при инициализации движка для создания цепочки каталогов/dat-файлов и поэтому "critter_patches из цепочки будет удалён" © не несёт никакой угрозы :-p

Это сообщение отредактировано Crafty - 30 сентября 2016 | 23:02


#580 Crafty

Crafty

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 423 сообщений

Отправлено 30 сентября 2016 - 23:39

Чутка подправил пару последних постов, чтобы понятнее выглядело.

Поменял все фиксированные "data\" на использование master_patches: глобальные и хуковые скрипты (scripts\gl*.int и scripts\hs_*.int), avi-мувики (\art\cuts\), авто быстросейвы (savegame\), говорящие бошки (art\heads\) и что-то там с шейдерами (shaders\ и art\stex\).

Изменил способ добавления стата при получении перка "Gain stat"/"Добавить стат" — теперь можно нормально (без получения +1 к стату) менять gain* перки через perks.ini.
Однако нужно будет допилить DrugExploitFix (разбор очереди событий, одетых вещей с перками), да и всяко это давно планировалось сделать...




Похожие темы Свернуть

  Название темы Форум Автор Статистика Последнее сообщение


Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных

Рейтинг@Mail.ru