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

F1-2: Тонкости модостроения в old Fallout'е


NukaCola

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

а вот нашел то что искал

set_viewport_x({int view_x});
set_viewport_y({int view_y});
 
но чето походу нет функции получения координат текущего города вот это косяк (или я ее не найду)
попробуй по подставлять разные функции для x/y типа таких:
get_world_map_x_pos
get_world_map_y_pos

добавлено позже

никакая вставка не поможет, только в блокнете++ с кодировкой win1251 или oem-866 (взависимости от шрифтов игры)

епта писать в .msg файлах игры а не через вставку в мапер!!!

set_world_map_pos() чет не пашет. или пашет но через раз.

 

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

Undefined symbol worldmap_xpos in factor с критичной ошибкой и не дает скомпилировать. хотя при наведении курсора он прекрасно знает что это за переменные.

 

типа того

 

2022-08-07-005111153.png

 

 

на скрине видишь еще два метода закоментированных.

 

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

 

 

2022-08-07-011746708.png

 

 

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

 

кстати то ли баг то ли фича но лучше юзать set_viewport_x(-y) потому что set_world_map_pos устанавливает положение игрока на мировой карте. играясь рядом с Сан Франциско я поставил игрока в море и никуда не смог двинуться B)

добавлено позже

вдогонку вопросы:

- как-то можно слипнуть процесс, стопорнуть выполнение скрипта? (в других языках sleep/wait etc.) хотя бы на секунду две, чтобы предыдущая команда выполнилась до выполнения предыдущей? это проблемы не только визуальные то и аудио, когда звуки начинают херачить одновременно если команды стоят одна за другой например. или с тем же load_map когда карта еще не прогрузилась а метарулы 44 и 45 выполнились и выдали внезапно координаты текущего положения а не "будущего". метарул3(111) ждет прогрузки или просто проверяет? я ж могу его в цикл запихнуть и ждать пока он выдаст загрузку. или метарул 22

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

у меня вобще парсер не хочет дружить с желтыми переменными в "розовых" функциях, всегда пишет Undefined symbol worldmap_xpos in factor с критичной ошибкой и не дает скомпилировать. хотя при наведении курсора он прекрасно знает что это за переменные.

Это set_world_map_pos(worldmap_xpos,worldmap_ypos); для исходников. В декомпилированном set_world_map_pos(metarule(44, 0), metarule(45, 0));

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

Это set_world_map_pos(worldmap_xpos,worldmap_ypos); для исходников. В декомпилированном set_world_map_pos(metarule(44, 0), metarule(45, 0));

да я так и понял, я уже давно обхожу такие места метарулами)))

я тут в сфолл скрипт эдиторе еще нашел список всех функций, сижу изучаю.

 

вобще мой предыдущий пост про слип был связан как оказалось (внезапно!!!!  :pleasantry: ) с работой функции load_map(). практикой да и в описании она действительно прерывает все скрипты и происходит принудительная загрузка карты не смотря ни на что.

 

как следствие у скриптов естесн не отрабатывают такие процедуры как map_exit и тому подобные связанные с корректным уходом с карты/удалением объектов/оставлением экрана погашенным и тд. вобще ВСЕ скрипты/эвенты стопятся и происходит load_map().

 

так же большинство кода переношу из map_enter в start. так как при загрузке сейва map_enter не пашет, а start пашет всегда. 

 

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

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

да я так и понял, я уже давно обхожу такие места метарулами)))

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

 

так же большинство кода переношу из map_enter в start.

ууу... чувствую багов новых потом половишь)

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

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

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

у меня их нет, я ж с декомпилами работаю

добавлено позже

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

я это делаю ток в скриптах вертиберда, так как выход из карты некорректный

добавлено позже

почему вот эта процедура с течением времени наглухо ложит карту (клиент зависает где-то через 2-3 минуты нахождения на карте)??

 

 

 

procedure timed_event_p_proc begin
   if (global_var(714) == 1) then begin
      if (anim_busy(self_obj) == 0) then begin
         float_msg(self_obj, message_str(1439, random(215, 224)), 3);
      end
      if (local_var(100) == 0) then begin
         animate_move_obj_to_tile(self_obj, (127 * 200) + 127, 0);
      end
      if (local_var(100) == 1) then begin
         animate_move_obj_to_tile(self_obj, (120 * 200) + 114, 0);
      end
      if (local_var(100) == 2) then begin
         animate_move_obj_to_tile(self_obj, (115 * 200) + 110, 0);
      end
      if (local_var(100) == 3) then begin
         animate_move_obj_to_tile(self_obj, (110 * 200) + 115, 0);
      end
      if (local_var(100) == 4) then begin
         animate_move_obj_to_tile(self_obj, (107 * 200) + 105, 0);
      end
      if (local_var(100) == 5) then begin
         animate_move_obj_to_tile(self_obj, (106 * 200) + 129, 1);
      end
      if (local_var(100) == 6) then begin
         animate_move_obj_to_tile(self_obj, (96 * 200) + 117, 0);
      end
      if (local_var(100) == 7) then begin
         animate_move_obj_to_tile(self_obj, (98 * 200) + 143, 1);
      end
      if (local_var(100) == 8) then begin
         animate_move_obj_to_tile(self_obj, (77 * 200) + 131, 1);
      end
      if (local_var(100) == 9) then begin
         animate_move_obj_to_tile(self_obj, (77 * 200) + 115, 0);
      end
      if (local_var(100) == 10) then begin
         animate_move_obj_to_tile(self_obj, (65 * 200) + 103, 1);
      end
      if (local_var(100) == 11) then begin
         animate_move_obj_to_tile(self_obj, (63 * 200) + 115, 0);
      end
      if (local_var(100) == 15) then begin
         animate_move_obj_to_tile(self_obj, (78 * 200) + 113, 0);
      end
      if (local_var(100) == 16) then begin
         animate_move_obj_to_tile(self_obj, (86 * 200) + 100, 1);
      end
      if (local_var(100) == 17) then begin
         animate_move_obj_to_tile(self_obj, (90 * 200) + 99, 0);
      end
      if (local_var(100) == 18) then begin
         animate_move_obj_to_tile(self_obj, (107 * 200) + 105, 0);
      end
      if (local_var(100) == 19) then begin
         animate_move_obj_to_tile(self_obj, (122 * 200) + 119, 1);
      end
      if (local_var(100) == 20) then begin
         animate_move_obj_to_tile(self_obj, (130 * 200) + 132, 0);
      end
      if (local_var(100) == 21) then begin
         animate_move_obj_to_tile(self_obj, (129 * 200) + 135, 0);
      end
      if (local_var(100) == 22) then begin
         obj_close(tile_contains_pid_obj(26134, 2, 33554451));
      end
      if (local_var(100) == 23) then begin
         animate_move_obj_to_tile(self_obj, 25942, 0);
         set_global_var(714, 2);
         set_local_var(100, -1);
      end
      set_local_var(100, local_var(100) + 1);
   end
   add_timer_event(self_obj, 90, 1);
   display_msg("maria1");
end

 

 

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

как следствие у скриптов естесн не отрабатывают такие процедуры как map_exit

должна отрабатывать! остальное нет. 

добавлено позже

у меня их нет, я ж с декомпилами работаю

это не мешает их подключить.

а я не работаю. поэтому не разбираюсь что там за циферки накручены.

добавлено позже

я это делаю ток в скриптах вертиберда, так как выход из карты некорректный

это и есть обычный скрипт.

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

добавлено позже

проверил скрипт(ы) на карте отрабатывает map_exit_p_proc перед load_map()

хз че там у тебя за вечные косяки - наверное карма мегамода)))

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

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

вот пример.

- я пешком выхожу из карты, пишу в мапэксит удалить полностью вертиберд

- захожу обратно: вертиберда нет, всё ок, отбработало

пример два:

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

- захожу пешком обратно пешком на карту: часть вертиберда осталась (хвост/крылья/рандом)

 

речь идет о скрипте самого верта, а не dude_obj.

 

так-то вобще всю механику можно затолкать в один этот скрипт и не париться))

 

еще другой прикол.

в одном скрипте это has_trait(0, dude_obj, 36) возвращает 1, типа прошел обучение, все ок.

в другом скрипте это же возвращает 0. 

пробовал юзать get_perk_available(36) тоже ноль возвращает, хотя скил взят с параметрами 1/310. как оно так работает я не понимай. может потомучто в разных процедурах используется? типа в start() карта еще не прогрузилась и персонаж и поэтому ноль возвращает.

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

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

добавлено позже

речь идет о скрипте самого верта, а не dude_obj.

у дудека как раз таки не всегда запускается exit (так задумано).

добавлено позже

- я через лоадмап выхожу из карты

- захожу пешком обратно пешком на карту:

чето не стыковка, как это ты пешком заходишь в карту??? если указанная карта уже будет загружена!

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

чето не стыковка, как это ты пешком заходишь в карту??? если указанная карта уже будет загружена!

нашел короче в чем ошибка была при удалении. позиции тайтлов на которых объекты.

спс

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

нашел короче в чем ошибка была при удалении. позиции тайтлов на которых объекты.

спс

понятно, как обычно человеческий фактор)

но прикола с "захожу пешком обратно на карту:" после лоадмап, я конечно не понял, тоже чел. фактор?)))

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

понятно, как обычно человеческий фактор)

но прикола с "захожу пешком обратно на карту:" после лоадмап, я конечно не понял, тоже чел. фактор?)))

имелось ввиду. винтокрыл находится на карте А. я на нем перелетаю с карты А на карту В (лоадмапом). потом пешком или на машине возвращаюсь на карту А и вижу там остатки винтокрыла.

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

 

вот у меня короче проблема в плане графики еще.

 

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

 

если делать Fadeout или gfade_out. то loadmap их действие отменяет и происходит точно та же анимация что я описал выше. то есть экран вроде погашенный, но перед загрузкой новой мапы все равно появляется игрок с присутсвующим/исчезающим винтокрылом))) на полсекунды-секунду.

 

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

 

мож есть что-нибудь такое чтобы не видно было текущее состояние перед лоадмапом?)))

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

потом видно что винтокрыл исчезает, перед ним стоит игрок. некомильфо так-то, винкторыл исчез а игрок стоит))) потом идет загрузка новой мапы.

Ну потому, что цепочка такая: map_exit > load map

поэтому ты видишь как исчезает самолет))

по идеи надо скрыть игрока - почему не скрывает хз.

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

 

мож есть что-нибудь такое чтобы не видно было текущее состояние перед лоадмапом?

 надо подумать.

добавлено позже

если делать Fadeout или gfade_out. то loadmap их действие отменяет и происходит точно та же анимация что я описал выше. то есть экран вроде погашенный, но перед загрузкой новой мапы все равно появляется игрок с присутсвующим/исчезающим винтокрылом))) на полсекунды-секунду.

можно вот это вот в движке игры попробовать подфиксить.

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

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

добавлено позже

поробовал, gfade_out c load_map ну и как и предполагал ничего не восстанавливается (пришлось с игры в слепую выходить) ищи у себя косяки.

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

поробовал, gfade_out c load_map ну и как и предполагал ничего не восстанавливается (пришлось с игры в слепую выходить) ищи у себя косяки.

слишком дохера сырого кода и слишком дохера измененных скриптов))

 

скрипта два.

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

второй ивентом смотрит на эту гвару и грузит лоадмап.

 

етесн елси ты внутри одного скрипта делаешь гфейдаут и ждешь лоадпама - то его естесн не будет.

второй скрипт перебивает ивентом и сбивает гашение

 

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

 

только это ивент.

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

 

вот кусок кода

 
procedure timed_event_p_proc begin
   
   if (global_var(713) == 1) then begin   
     while (not(global_var(713)==0)) do begin
      set_global_var(713, 0);
      end
      gfade_out(1);
      load_map(5,0);
      gfade_In(1);
   end
   add_timer_event(self_obj, 10, 1);
 
end
 
поиграй со вторым параметром в add_timer_event() от 5 до 100.
 
при значениях 5-10 лоадмап ломает как gfade_out() так и Fadeout()
Ссылка на комментарий

gfade_out(1);
load_map(5,0);
gfade_In(1);

какой гений придумал такую конструкцию????

gfade_In(1) должен исполняться уже поле того как загрузится новая карта! в мап_ентер например

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

добавлено позже

тебе по факту надо учить скриптинг фола, ты просто баги создаешь, или кто там скриптил это дело.

 

сделал такую-же "хрена-тень" и получил такое-же поведение как ты описал ранее с восстановлением, ты думал это load_map восстанавливает?))

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

ты думал это load_map восстанавливает?))

*рукалицо*

 

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

заработало как надо.

перед loadmap'ом fadeout(1200), после loadmap'a return 0 а в map_enter_p_proc прописал 

 

if (not(metarule(22, 0) + условие что мы таки прилетели на винтокрыле сюда а не как-то иначе, чтобы не при каждом входе работал gfade_in) then begin gfade_in(1) end.

 

и загрузка карты происходит в затемннёном экране.

 

по механике, каким образом происходит принудительный выход с мировой карты и загрузка на рандомную карту(рандомные встречи) или карту встречи с Френком Хориганом?

то есть, ИЗ мира В мапу. принудительно. как при рандом встрече.

карта встречи с Френком, индекс мапы 149 в ММ, название gammovie. не нашел скриптов с ее принудительной загрузкой.

 

ПЫСЫ: принудительный выход НА мировую карту в любом месте есть по world_map (и оно рботает). кстати есть даже булевая in_world_map возвращающая на мировой ты карте или нет (а ты говорил это движок и это невозможно).

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

 

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

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

кстати по вот этому

https://gitflic.ru/project/fakelshub/sfall/issue/6

 

текущий город - есть metarule(44,0) и metarule(45,0), и они работают.

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

я это юзал вот так

set_viewport_x(metarule(44,0));

set_viewport_y(metarule(45,0));

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

каким образом происходит принудительный выход с мировой карты и загрузка на рандомную карту(рандомные встречи) или карту встречи с Френком Хориганом?

Через файл WORLDMAP.TXT, Френк через движок появляется.

 

моя идея такова чтобы вызывать мировую карту

load_map(0, 0);

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

На мировой карте обычные игровые скриты фола не работают.

Работают только sfalloвские. Почитай доку по sfall и поймешь.

https://gitflic.ru/project/fakelshub/sfall/wiki

добавлено позже

кстати по

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

Ну там надо добавить размер вьюпорта поделенного на 2, чтобы это было в центре. Вроде так.

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

добавлено позже

Можно под верталет специальную механику заделать.

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

Но это надо двиг доделывать, скриптово такое не сделать.

Так что моментальный телепорт это сейчас единственный вариант для верталета.

Хотя можно принудительно отключить встречи, и тогда получится движение как на машине (только скорость надо по выше x10 напрмер а это двиг).

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

Можно под верталет специальную механику заделать.

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

 

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

 

самое первое что мне нужно, это причесать всё что я сделал и дать хотя бы Pyran'у чтобы он потестил и заценил

добавлено позже

еще вопрос такой больной для меня вопрос.

багажник машины является членом пати.

багажник винтокрыла аналогично, механика та же (ну почти).

 

и тут я натыкаюсь в скрипте Сулика на условие проверки максимального количества людей в пати. и там и речи нет о 455 мембере(машина) или проверки наличия машины или проверке 18й гвары (отвечает за взятие машины) что хотя бы на -1 надо делать скидку при проверке на добавление нового патимембера.

 

и вот теперь вопрос. мне стоит как-то переживать по этому поводу?)))

 

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

 

upd: дошел до чтения доков sfall'a. вынести всю логику в глобальные скрипты и забыть про party member как страшный сон. там же вычисилять вьюверы. я проверил, в скрипте игры sfall_func2("get_window_attribute", 3, 3) это чтение длины окна мировой карты выдает -1, оно и понятно, я ж не на мировой карте выполняю скрипт а на локальной. интерфейсное окно мировой карты не прорисовано....

 

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

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

 

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

я прав? или таки map_enter_p_proc  глобального сфоловского скрипта выполняется после внутриигрового мапового/криттера/итема и тп? или вобще не морочиться зациклить глобальный скрипт?

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

я проверил, в скрипте игры sfall_func2("get_window_attribute", 3, 3) это чтение длины окна мировой карты выдает -1, оно и понятно, я ж не на мировой карте выполняю скрипт а на локальной. интерфейсное окно мировой карты не прорисовано....

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

добавлено позже

я прав? или таки map_enter_p_proc  глобального сфоловского скрипта выполняется после

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

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

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

мож я чо не так понимаю))

 

короче то что зеленый треугольник с игроком на мировой карте появляется в координатах (0,0) это итак понятно,да? получается что карта полностью на размер интерфейсного окна мировой карты смещается вправо-вниз.

 

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

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

типа того. 

было вот так

 

2022-08-07-011746708.png

 

 

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

 

я обработал это вот так в коде на данный момент:

 

первые строчки с гварами нужны чтобы обрабатывать именно исключительный "залет" на карту, иначе  - путь обрабатывается стандартно движком/другими не моими скриптами

 

procedure map_exit_p_proc begin
   script_overrides;
   if (cur_map_index == global_var(722)) then begin // индекс последней мапы куда "летали"
      if (global_var(711) == 1) then begin                     // флаг того что мы конкретно сейчас "прилетели"
         while (not(global_var(711) == 0)) do begin
            set_global_var(711, 0);
         end
         variable xxx := get_world_map_x_pos - 300;
         variable yyy := get_world_map_y_pos - 300;
         
         if (xxx<0) then begin
         set_viewport_x(get_world_map_x_pos-300 + abs(xxx) + 1);
         end
         else begin
         set_viewport_x(get_world_map_x_pos-300 + 1);
         end
 
         if (yyy<0) then begin
         set_viewport_y(get_world_map_y_pos-300 + abs(yyy) + 1);
         end
         else begin
         set_viewport_y(get_world_map_y_pos-300 + 1);
         end
      end
   end
end

 

 

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

 

2022-08-08-204548483.png

 

 

 

2022-08-08-205002487.png

 

 

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

 

а можно это обработать по размеру интерфейсного окна мировой карты и смотреть чтобы его границы не вылезали за мировую карту(узнать бы еще размеры мировой карты хе-хе). а можно сразу и "примагничивать" эти границы.

типа проверки right топ угол интерфейсного окна>=0 по координатам мировой карты, если не удовлетворяет(меньше нуля), обнуляем эту переменную отвечающую за левый край интерфейсного окна. и дальше правый край рисуем по размеру. и так со всех сторон проверяем. происходит по идее "примагничивание" к краю. ну как я в коде сделал, если получили минус при сдвиге то уменьшаем сдвиг именно на величину получившегося минуса + 1 пиксель для красоты. и у меня края четко по краям мировой карты выходят (ну +1 пиксель)))) ) ну или как-то так. движок же как-то это обрабатывает.

 

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

 

2022-08-08-212243275.png

 

 

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

 

а еще я нашел такой скрипт

#define METARULE3_TILE_SET_CENTER           (108)
#define tile_set_center(tileNum)             metarule3(METARULE3_TILE_SET_CENTER,tileNum,0,0)
 
мож как-то по аналогии можно сделать для мир карты.
 
upd. поставил свежий sfall 5,0,1 релиз.
заметил такую бяку, что-то видимо у меня со шрифтами или кодировками. в сообщении говорится о получении 5 очков кармы. где и что поправить?

2022-08-09-001446581.png

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

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

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

 

заметил такую бяку, что-то видимо у меня со шрифтами или кодировками.

кодировку текста другую надо, я ж не знаю что ты там ставил, и какие у мегамода шрифты стоят для win или для dos ?

добавлено позже

upd. если отнимать по 350 то вобще идеально по центру получается.

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

ширина/2=  (700/2=360)

высота/2=   (680/2=340)

для оригинального маленького интерфейса уже другие цифры

добавлено позже

мож как-то по аналогии можно сделать для мир карты.

сейчас нельзя, а потом можно будет)

а пока считать самим.

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

кодировку текста другую надо, я ж не знаю что ты там ставил, и какие у мегамода шрифты стоят для win или для dos ?

похоже при установке тыкнул на галку установить шрифты dos для us клиента. как-то можно это вернуть взад?

 

а еще инвентарь в два ряда это бомба!!!! было бы круто еще в два ряда рисовать другие аналогичные интерфейсные окна (при воровстве/луте с криттеров и итемов-контейнеров).

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

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

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

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

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

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

Войти

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

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

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