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


Фотография

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


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

#641 Phobos

Phobos

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

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

Отправлено 14 октября 2016 - 19:44

Fakeman,
Я собирал раньше в Sharp Develop. Сегодня использовал VS 2013.

Собранная версия.:


#642 Fakeman

Fakeman

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

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

Отправлено 14 октября 2016 - 21:00

Phobos, а ясно у меня в студии не установлен С#
А почему в файл sslSyntaxRules.xshd нельзя добавить свою секцию с ключевыми словами, <KeyWords> ... </KeyWords> добавляешь возникает ошибка, там какой-то хардкод или я что-то делаю не так?
И не правильно сделана подсветка синтаксиса у
#define <макрос> эта строка с макросом не должна полностью подсвечиваться  — иначе код в макросе не подсвечивается.

Это сообщение отредактировано Fakeman - 14 октября 2016 | 21:03


#643 Crafty

Crafty

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

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

Отправлено 18 октября 2016 - 00:18

QUOTE (Foxx)
QUOTE (Crafty)
avi-мувики в art\cuts\, art\stex\, добавленные говорящие бошки в art\heads\.
Это относится если только в скриптах типа gl*.int и hs_*.int они прописаны?
Это к скриптам не относится.
Чтобы вместо mve-мувиков проигрывались avi-мувики их имена должны быть такие же как определены в переменных Movie#, а переменная Mode в секции [Graphics] не должна быть равна 0.

QUOTE (Fakeman)
А вот про головы я непонял, как это их нельзя паковать, есть какие-то не стандартные? Чуть раньше задавал вопрос про heads png, но я так понял по коду что сфалл конвертирует фрм в пнг и делает что-то там с палитрой — это наверное работает когда включена опция Head32-bit, но что-то я какого-либо улучшения графикидля голов не замечаю.
Use32BitHeadGraphics=1 и остальные требования по граф.режиму, в art\heads\говорящая_бошка\[0-numFrames].png (numFrames — number of frames per direction, подробнее в "FRM Image File Format").

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

QUOTE (Foxx)
Я с начала с ней и пробовал, потом без неё, переносил wav/mp3 в папку DATA. Все равно не работает.
AllowDShowSound=1, mp3/wma/wav в том же каталоге, что и оригинальный acm.

QUOTE (Fakeman)
не, похоже просто не работает, так как там написано что:
CODE
;This does not effect the play_sfall_sound and stop_sfall_sound script functions
В play_sfall_sound можно указать свой путь к конкретному файлу и AllowDShowSound не будет играть роли.

QUOTE (Phobos)
А по какому принципу работает новый параметр TimeScale? Я так понимаю он меняет скорость прироста игрового таймера в тиках (т.е. скрипты которые зависят от проверок времени не сломаются по идее)?
Верно, однако визуально ломаются скриптовые сценки проигрывания анимации (если она завязана на тики реального времени). Отличный пример — встреча с Фрэнком, после расстрела семьи фермера они застывают в "неудобных" позах.
В принципе исправляется добавлением дополнительной проверки на проигрывание анимации в следующей сценке. ECBDYGRD.SSL:
CODE
procedure doSequence begin
.....
  end else if (sequence == 8) then begin
     kill_critter(farmer, ANIM_chunks_of_flesh_sf);
     .....
     float_msg(self_obj, mstr(108), FLOAT_MSG_NORMAL);
     sequence += 1;
     add_timer_event(self_obj, game_ticks(3), TIMER_SEQUENCE);
  end else if (sequence == 9) then begin
на
CODE
procedure doSequence begin
.....
  end else if (sequence == 8) then begin
    if (anim_busy(guard1) or anim_busy(guard2) or anim_busy(farmer) or anim_busy(wife) or anim_busy(child)) == false then begin
     kill_critter(farmer, ANIM_chunks_of_flesh_sf);
     .....
     float_msg(self_obj, mstr(108), FLOAT_MSG_NORMAL);
     sequence += 1;
    end
    add_timer_event(self_obj, game_ticks(1), TIMER_SEQUENCE);
  end else if (sequence == 9) then begin
В общем масло маслянное.

QUOTE (Fakeman)
Еще этот TimeScale введет небольшой бардак в механику игры основанную на скриптах — вот допустим в скрипте указано, что каждую минуту ГГ должен получать какой-то урон(рад) от радиации, то при TimeScale=x2 получается, что он уже будет получать его каждые 2 минуты игрового времени.
Нет, как ГГ получал урон каждую минуту игрового времени, так и будет получать.

QUOTE (Fakeman)
Кстати а как насчет догмита она тоже будет взламывать/разминировать у нее скиллы по 22-27% ? ))))))
Дело говоришь :)


#644 Fakeman

Fakeman

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

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

Отправлено 18 октября 2016 - 14:56

Все эти сторонние форматы для проигрывания имеют один минус, громкость их звучания независит от настроек внутри игровых регуляторов, т.е. громкость не регулируется)
Воиспроизвести музыку главного меню в мп3 формате мне так и не удалось.


#645 Crafty

Crafty

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

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

Отправлено 18 октября 2016 - 18:52

QUOTE (Fakeman)
Воиспроизвести музыку главного меню в мп3 формате мне так и не удалось.
У меня начинает играть, через секунду обрывается.


#646 Foxx

Foxx

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

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

Отправлено 18 октября 2016 - 19:08

QUOTE (Crafty)
У меня начинает играть, через секунду обрывается.
У меня точно также. Пробовал разные степени сжатия MP3, моно, стерео, VBR, CBR, битрейт — итог один, не хочет работать. Ну и фиг с ним.

Это сообщение отредактировано Foxx - 18 октября 2016 | 19:47


#647 Fakeman

Fakeman

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

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

Отправлено 18 октября 2016 - 22:06

а в какую вы папку клали mp3 — у меня тишина.

QUOTE
Нет, как ГГ получал урон каждую минуту игрового времени, так и будет получать.

Каким это таким способом?)
А как время действия/зависимость наркоты тоже также осталось или увеличивается?
Все никак рука не дотянется протестировать этот Shit-Time :)
-
Во протестировал, теперь ясно ты просто увеличил скорость тикам) выше 10 ставить смысла нет ибо все начинает глючить — мобы дергаются при хождении, все начинают быстро разговаривать, это по сути тоже самое, что и SpeedMultiInitial только без анимации.

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


#648 Foxx

Foxx

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

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

Отправлено 18 октября 2016 - 22:16

QUOTE (Fakeman)
а в какую вы папку клали mp3 — у меня тишина.
Я кидал в data/sound/music
Брал любой MP3 и переименовывал в 06rokot. При начале новой игры в Неваде происходит рывок этой песни и обрывается.
QUOTE (Fakeman)
А как время действия/зависимость наркоты тоже также осталось или увеличивается?
Всё вроде сохранено.
Проверял так (просьба не смеяться):
Установил TimeScale=10.
Сделал специальный прошник-наркотик с временем действия: через 30 минут облучение и еще через 30 минут облучение.
И мотал время в Pip-Boy — действие от наркоты такое же, как и при TimeScale=1

Только у NPC над бошками стали очень часто выскакивать всплывающие сообщения)) Но Crafty об этом предупреждал.

Это сообщение отредактировано Foxx - 18 октября 2016 | 22:41


#649 Fakeman

Fakeman

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

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

Отправлено 19 октября 2016 - 00:05

QUOTE
Проверял так (просьба не смеяться):

Хаха нуб... не ну все правильно проверил).

QUOTE
Только у NPC над бошками стали очень часто выскакивать всплывающие сообщения)) Но Crafty об этом предупреждал.

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

QUOTE (Crafty)
Так и будет.


#650 Foxx

Foxx

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

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

Отправлено 19 октября 2016 - 00:44

А ещё он писал:
QUOTE (Crafty)
Это возможно, но с побочным эффектом (хотя это нормально) — все timed_event_p_proc тоже будут работать быстрее (к примеру, Вик чаще болтает флоатами).
Только тут уже все NPC болтают чаще))


#651 Crafty

Crafty

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

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

Отправлено 19 октября 2016 - 00:58

QUOTE (Fakeman)
Во протестировал, теперь ясно ты просто увеличил скорость тикам) выше 10 ставить смысла нет ибо все начинает глючить — мобы дергаются при хождении, все начинают быстро разговаривать, это по сути тоже самое, что и SpeedMultiInitial только без анимации.
В этом и был смысл — увеличить скорость времени без увеличения скорости анимации, чтобы действия в игре выглядели реально по игровому времени — пробежался от дома к дому за 10 секунд игрового времени, а не за 1 секунду.
Мобы не дёргаются даже при 1000, разговаривают как и раньше через определённый промежуток игрового времени. И да, по сути TimeScale и SpeedMultiInitial — масло масляное ;-p

QUOTE (Foxx)
Брал любой MP3 и переименовывал в 06rokot.
В F2 это 07desert.

QUOTE (Fakeman)
ну вот в чем и вопрос, хотелось чтобы время шло быстрее, а все тики остались такими-же (прим.ред. по скорости).
А как ещё можно ускорить время не затрагивая тики, если последние и являются временем.
Прочитал оригинал:
QUOTE
I know you can modify the ddraw.ini to change the speed of the game, resulting in more fluid animations. Is there any setting anywhere in the game that changes the time scale? It currently seems 1:1, with 1 minute real world time equaling 1 minute in-game time when not traveling or waiting. Is it possible to quicken this to one second equals one minute, or whatever the user may apply? The dynamic of the days was one of the few things that bothered me about the game — I hate how I can roll into Junktown, take out Morbid, save Killian, take out Gizmo, recruit Tycho, bust the Skulz.... all in the space of half an hour in-game. Video Game exposition is more concise and less nuanced than any real world negotiation/action, and I feel the time should reflect this succinctness. Well, sorry for ranting.

Tl;dr is there any way to modify the time scale?
И сделал так же.

QUOTE (Crafty)
Так и будет.
Так и есть.

Это сообщение отредактировано Crafty - 19 октября 2016 | 01:17


#652 Fakeman

Fakeman

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

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

Отправлено 19 октября 2016 - 02:55

QUOTE
А как ещё можно ускорить время не затрагивая тики, если последние и являются временем.

Ну я как Профессионал с большой буквы в этом деле)) скажу, что нужно сделать переменную в которой тики будут вычисляться по формуле: Tics X TimeScale = NewTics
(но я так понимаю будет переполнение переменной раньше времени)
NewTics — это тики которые нужны будут для времени в пип-бое. (не в курсах как там эти тики преобразуется в формат ЧЧ:ММ ДД/МM/ГГГГ).
При этом функции game_time_hour/get_day/get_month должны по видимому брать тики из новой переменной.

Еще вариант поковырять код который преобразует тики в формат времени для пип-боя и сделать там множитель равный TimeScale.

QUOTE
Мобы не дёргаются даже при 1000

при 100 скриптовые у которых перемещение связанно через тики на таймере дергаются как под током))
и чтобы это исправить нужна проверка на AnimBusy

Имя параметру логичнее было бы дать TikcsSpeedMulti :)

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


#653 Crafty

Crafty

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

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

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

QUOTE (Fakeman)
скажу, что нужно сделать переменную в которой тики будут вычисляться по формуле: Tics X TimeScale = NewTics
(но я так понимаю будет переполнение переменной раньше времени)
NewTics — это тики которые нужны будут для времени в пип-бое. (не в курсах как там эти тики преобразуется в формат ЧЧ:ММ ДД/МM/ГГГГ).
При этом функции game_time_hour/get_day/get_month должны по видимому брать тики из новой переменной.

Еще вариант поковырять код который преобразует тики в формат времени для пип-боя и сделать там множитель равный TimeScale.
Не понимаю что в итоге должно выйти, причём тут пипбой и что ты ожидал увидеть. Приведи практический пример.

Тики содержатся в целочисленной беззнаковой (unsigned int, [0, +4 294 967 295]) переменной (_fallout_game_time) и десять раз в секунду увеличиваются на единицу. В понятный формат времени тики преобразуются простейшими делениями из расчёта значений:
CODE
/* Time Information  (in Ticks) */

#define ONE_GAME_SECOND             (10)
#define ONE_GAME_MINUTE             (60*ONE_GAME_SECOND) = 600
#define ONE_GAME_HOUR               (60*ONE_GAME_MINUTE) = 36000
#define ONE_GAME_DAY                (24*ONE_GAME_HOUR) = 864000
#define ONE_GAME_WEEK               (7*ONE_GAME_DAY) = 6048000
#define ONE_GAME_MONTH              (30*ONE_GAME_DAY) = 25920000
Потом к году прибавляется 2241, к месяцу 6 и к дню 24.

QUOTE (Fakeman)
и чтобы это исправить нужна проверка на AnimBusy
Не обязательно, посмотри как в том же ECBDYGRD.SSL сделан 11 sequence.


#654 Fakeman

Fakeman

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

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

Отправлено 19 октября 2016 - 22:29

QUOTE
Не понимаю что в итоге должно выйти, причём тут пипбой и что ты ожидал увидеть.

Ожидал увидеть, что скорость тиков останется такой-же, а время будет будет идти быстрее.
Смотри сейчас 1 сек равна 10 тикам соответственно у нас есть возможность влиять на время без увеличения скорости тиков, просто меняем константу которая указывает сколько в секунде тиков. (в движке же это заложено, не с потолка же они взяли 10 тиков).
К примеру ONE_GAME_SECOND равна 5 тикам, получаем прирост времени х2 при тех же количествах тиках в переменной _fallout_game_time а один игровой час(ONE_GAME_HOUR) должна будет равняться 18000 тикам.

Но есть побочка этого способа завязанная на механике в количестве тиксов, наркота будет действовать в два раза дольше, лечится игрок будет каждые 12 часов, восстанавливать +1 очко здоровья будет не в конце дня, а через день, и т.п. фигня.
Поэтому тут возникает вопрос, а так уж ли и нужно это увеличение времени с такой побочкой без правки всего этого?

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


#655 Crafty

Crafty

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

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

Отправлено 20 октября 2016 - 01:12

QUOTE (Fakeman)
Ожидал увидеть, что скорость тиков останется такой-же, а время будет будет идти быстрее.
"А как ещё можно ускорить время не затрагивая тики, если последние и являются временем."
Твой способ требует ненужных усилий по изменению движка и дополнительной правки скриптов (game_time + ONE_GAME_SECOND) при каждом изменении TimeScale, а единственный, помимо увеличения скорости течения времени, "профит" от всего этого — увеличение лимита игрового времени (13*TimeScale). И это всё равно автоматически не решает проблему с анимацией в скриптовых сценках.


#656 Fakeman

Fakeman

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

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

Отправлено 20 октября 2016 - 02:46

QUOTE
дополнительной правки скриптов (game_time + ONE_GAME_SECOND) при каждом изменении TimeScale,

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

QUOTE
И это всё равно автоматически не решает проблему с анимацией в скриптовых сценках.

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

Ладно завязываем эту тему)







#657 Crafty

Crafty

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

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

Отправлено 20 октября 2016 - 03:56

QUOTE (Fakeman)
QUOTE
дополнительной правки скриптов (game_time + ONE_GAME_SECOND) при каждом изменении TimeScale,
я и рассматривал это с позиции модмейкеров, что потребуется правка наркоты/скриптов относительно множителя.
Так даже с этой позиции в разы проще использовать вариант с увеличением частоты прироста тиков, при этом один раз скомпилировать существующие скрипты с дополнительными проверками на anim_busy, чем каждый раз при изменении TimeScale перекомпилировать всё.


#658 Fakeman

Fakeman

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

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

Отправлено 20 октября 2016 - 17:17

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

и start_gdialog(NAME, ptr_obj, mood, head, BACKGROUND)
вроде как багнута параметр mood игнорируется, и всегда при начале разговора показывает нам хорошую(GF/GP) физиономию. (по идеи должна быть нейтральная если уж не учитывать mood). возможно я ошибаюсь.
У голов еще есть не используемый суффикс V для плохой(BV) и хорошей(GV) головы, о котором ничего ни где не написано.

И еще такой вопрос не совсем относящийся к сфаллу.
в движке заложено ограничение на количество используемых frm в 4096, потому как в индификаторе frm pid для этого используется 12 бит, остальные 4 бита(ID1) используются под нужды криттеров и голов, для остальных типов не используется, и их значения могут быть любыми(если верить докам).
CODE
Поля «Object type» и «Индекс в лист-файл» используются всегда, а поля «ID3», «ID2» и «ID1» могут игнорироваться в зависимости от значения поля «Object type». Значение не используемого бита может быть любым.

Поэтому вопрос, возможно ли расширить указатель на индекс lst до полных 2-x байт (16 бит) для Тiles (реально не хватает 4к изображений :) )
Сам формат карт вроде как поддерживает сохранение в нем 16-битого указателя на индекс фрм'ки.
CODE

На одну плитку приходится 4 байта. Структура плитки: RR RR TT TT
где RR RR - это указатель плитки крыши (roof tile) по листфайлу master.dat\\art\tiles.,нависающей над плиткой пола, а TT TT - указатель плитки пола (floor tile) по тому же самому листфайлу. Данное решение позволяет использовать одни и те же плитки в качестве крыши и пола.

Но в движке и маппере не учитывает эти 4 бита и показывает нам черную дырку в плитке если значение указателя больше 0FFF, можно это починить? (ну и соответственно в маппере то-же самое.)

Я тут пытался кое чего поискать — но сам понимаешь ассемблер это не моя стихия) Вот есть такое очень похожее на нашего пациента
CODE
004B2A56 loc_4B2A56:                                ; square_render_floor_+197j
004B2A56            mov     eax, [esp+44h+var_34]
004B2A5A            mov     ebx, [esp+44h+var_18]
004B2A5E            mov     edx, ds:_squares
004B2A64            add     eax, esi
004B2A66            add     edx, ebx
004B2A68            lea     edi, ds:0[eax*4]
004B2A6F            mov     edx, [edx]
004B2A71            mov     edx, [edx+edi]
004B2A74            and     edx, 0F000h
004B2A7A            shr     edx, 0Ch
004B2A7D            test    dl, 1
004B2A80            jnz     short loc_4B2AD4

логическая операция И, сдвиг на 12 бит и проверка результата — если пациент здоров то по видимому рисуем тайл.
потом ниже кодом идете обнуление старших 4 битов
CODE

004B2AB1            mov     eax, 4                  ; ObjType Tiles
004B2AB6            and     edx, 0FFFh            ; Index

Я убил jnz выше nop'пами — тайлы пола появились, но старшие 4 бита все равно не учитываются. (и как позже выяснилось, тайлы пола все равно не дает рисовать HRP с ним черная дыра).
Крыша кстати изначально показывается, но 4 бита где-то обнуляются и показывается тайл начиная с первого индекса ну ты понял, а изменение кода на and edx, FFFFh не помогает. если в режиме отладки проверить рег. edx то там как раз то число что записано в карте вида RRTT.
Я там все что нашел по исправлял(исправлял прямо в exe) а толка никакого) в общем нид хелп!
И как быть с HRP?

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


#659 Crafty

Crafty

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

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

Отправлено 23 октября 2016 - 17:58

QUOTE (Fakeman)
Сможешь довести до ума 32-битные головы?
Не очень хочу заниматься DirectX'овскими плюшками, в общем не в приоритете это... :-p

QUOTE (Fakeman)
и start_gdialog(NAME, ptr_obj, mood, head, BACKGROUND)
вроде как багнута параметр mood игнорируется, и всегда при начале разговора показывает нам хорошую(GF/GP) физиономию. (по идеи должна быть нейтральная если уж не учитывать mood). возможно я ошибаюсь.
mood учитывается только если не используется говорящая башка (head = -1).
У башки реакция хранится в нулевой локальной переменной её скрипта, и настроение вычисляется с помощью local_var(0) из скрипта цели:
CODE
if local_var(0) > 10 then mood := good_fidget;
else if local_var(0) > -10 then mood := neutral_fidget;
else mood := bad_fidget;

QUOTE (Fakeman)
Поэтому вопрос, возможно ли расширить указатель на индекс lst до полных 2-x байт (16 бит) для Тiles (реально не хватает 4к изображений :) )
Посмотрю сначала у себя, там дофига менять... Если выйдет, то будет 16384 вместо 4096. Ну и HRP может всё похерить.


#660 Fakeman

Fakeman

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

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

Отправлено 23 октября 2016 - 19:13

CODE
У башки реакция хранится в нулевой локальной переменной её скрипта, и настроение вычисляется с помощью local_var(0) из скрипта цели:

Я вас понял. :) вот это конечно новость для меня. как кирпич на голову.

QUOTE
Посмотрю сначала у себя, там дофига менять... Если выйдет, то будет 16384 вместо 4096.

С чем связанно именно 16348 а не 65535? для чего 1 бит оставлять, в качестве знака что ли?
вот эту надо функцию надо копать
004B2ACF call floor_draw_
я не смог в ней нормально разобраться где там обнуляются 4 бита.
пред ее вызовом в eax содержится значение вида 0400TTTT (это после правки art_id_)
что делает функция art_id_ ? — я так понял что она общая для всех да?

QUOTE
Ну и HRP может всё похерить.

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

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




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

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


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

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

Рейтинг@Mail.ru