Вариативность локаций в Ф2
#1
Отправлено 03 Февраль 2012 - 19:43
#2
Отправлено 03 Февраль 2012 - 22:01
#3
Отправлено 04 Февраль 2012 - 01:39
По сути мне нужно сделать 2 вида одного и того же города, один из которых будет подгружаться в зависимости от ГВАРа. Легче всего в этом случае сделать именно 2 города и прописать их в файле city.txt как невидимые, а потом при помощи команды mark_area_known поставить один из этих городов видимым.
П.С. Извините за беспокойство, почему то этот очевидный вариант не дошел до меня сразу....
П.П.С. В доке написано:
QUOTE |
void mark_area_known(int mark_type, int area, int mark_state) установить статус локации Аргументы: mark_type тип локации: MARK_TYPE_TOWN (0) город MARK_TYPE_MAP (1) карта area номер локации (см. MAPS.H и MAPS.TXT) mark_state статус: MARK_STATE_UNKNOWN (0) неизвестен MARK_STATE_KNOWN (1) известен MARK_STATE_VISITED (2) посещался MARK_STATE_INVISIBLE (-66) невидим |
из чего следует , что в агрументе "area" нужно писать номер карты из MAPS.H и MAPS.TXT; но вот если мне нужно изменить статус города , мне нужно писать номер из CITY.txt или все таки из MAPS.txt?
#4
Отправлено 04 Февраль 2012 - 18:35
Не факт, что движок проглотит два города в одной точке мира. Проверяй. Если будет падать пробуй вариант с включением/выключением entrance. Два вида одного и того же города, повторюсь, реализованы в V15. Как раз через включение/отключение entrance. Можно подсмотреть и сделать по аналогии.
#5
Отправлено 04 Февраль 2012 - 22:28
QUOTE |
[Area 09] ; Vault 15 area_name=Vault 15 world_pos=1284,1433 start_state=On size=Medium townmap_art_idx=167 townmap_label_art_idx=386 entrance_0=On,180,273,The Squat A,-1,-1,0 entrance_1=Off,-1,-1,The Squat A,-1,-1,0 entrance_2=Off,-1,-1,The Squat B,-1,-1,0 entrance_3=Off,-1,-1,Vault 15,-1,-1,0 entrance_4=Off,-1,-1,Vault 15 East Entrance,-1,-1,0 |
#6
Отправлено 05 Февраль 2012 - 14:35
#7
Отправлено 05 Февраль 2012 - 16:49
П.С.
На самом деле там с V15 ваще странная история, походу даже разрабы мучались с похожей проблемой... Из срочек в City.txt:
QUOTE |
entrance_0=On,180,273,The Squat A,-1,-1,0 entrance_1=Off,-1,-1,The Squat A,-1,-1,0 entrance_2=Off,-1,-1,The Squat B,-1,-1,0 |
видно что по идеи должны меняться локации The Squat A и The Squat B. Я посмотрел как должны называться карты для них и обнаружил что для карты The Squat B просто нету....карты. Т.е. она прописана и в City.txt и в Maps.txt, но самого файла карты нету.
На самом деле The Squat B существует просто как 2-ой уровень карты The Squat A (V15ent.map если быть точным).
#8
Отправлено 05 Февраль 2012 - 17:54
Хотя, если движок терпит два города в одном, то так, наверное, будет проще.
#9
Отправлено 05 Февраль 2012 - 18:13
entrance_0=On , значит Чуз при первом входе в город всегда появляется на карте The Squat A, но потом, видимо, идет проверка ГВАРы , и карта локации (если необходимо) меняется с 1-ого уровня на 2-ой уровень...
А дальше все это фиксируется в сэйве, так по идеи...
Это сообщение отредактировано Nordan - 5 февраля 2012 | 19:18
#10
Отправлено 05 Февраль 2012 - 20:29
К сожалению, у меня лично нет времени ковырять скрипты. Могу только указать направление, в котором надо копать. Собственно, уже указала. V15. Искать "The Squat" и всё, что с ним связано: описания карт, локации V15, скрипты... Или другой вариант: ничего не искать, взять и проверить на конкретном примере своего собственного города работу макроса mark_map_entrance_state. Это вообще самый лучший способ разобраться: попытаться реализовать и посмотреть, как оно работает.
#11
Отправлено 06 Февраль 2012 - 08:13
Отправлено: 6 фев 12 19:10
Окей, долго думал над определением макроса:
QUOTE |
mark_map_entrance_state(int map_idx, int state) задать состояние входа на карту (выкл/вкл) для всех уровней |
точнее над фразой "состояние входа"; не долго думая, написал простейший скрипт:
CODE |
procedure start; procedure map_enter_p_proc; procedure start begin end procedure map_enter_p_proc begin set_global_var(634, 1); if global_var(634) > 0 then metarule3(104, 10, 1, -1); //10-ая локация - городок трапперов display_msg("Скрипт работает"); end |
приклеил его к гидранту в Кламате (на стартовой локации, ессно ) , и попробовал в игре....
получилась такая ситуация:
скрипт сработал и открыл городок трапперов (маркер) на карте города (даже если не входить в сам городок трапперов).
Я так понял: нада все таки искать как это сделали БИСовцы в исходниках
П.С. metarule3 это исходная команда макроса mark_map_entrance_state.
Просто я только что отошел от моральной травмы в связи с потерей винчестера (по совместительству со всеми наработками и инструментарием), оффициальный компилятор еще не настроил, а скрипт эдитор мозги парит с подключением файлов заголовков, так что работу препроцессора я взял на себя
Это сообщение отредактировано Nordan - 6 февраля 2012 | 19:59
#12
Отправлено 07 Февраль 2012 - 20:46
Пробил ГВАРы по слову "shit" , нашел гвару "GVAR_MODOC_SHITTY_DEATH".
Дальше нашел использование этой ГВАРы в скрипте MILADDER (похоже это скрипт лестницы):
CODE |
procedure use_p_proc begin if (global_var(GVAR_MODOC_SHITTY_DEATH) == 0) then begin set_leaving_shitter; end else begin script_overrides; end end |
Дальше нашел set_leaving_shitter в MODOC.H:
CODE |
#define set_leaving_shitter set_modoc_flag_1_on(leaving_shitter_bit) |
Дальше несколько переходов в MODOC.H:
CODE |
#define set_modoc_flag_1_on(x) set_modoc_flag_on(x, 1) #define set_modoc_flag_on(x, y) set_gvar_bit_on(GVAR_MODOC_GENERIC_FLAG_##y, x) |
Дошел до функции set_gvar_bit_on, что делать дальше не очень представляю...
#13
Отправлено 07 Февраль 2012 - 21:38
Upd: кстати, да. Голова моя дырявая. В V15 тоже, наверное, через override_map_start делается... В map_enter висит проверка на ГВАРу, затем стоит override_map_start. Ну, это значит только одно: работу mark_map_entrance_state определённо надо тестировать на собственных примерах.
#14
Отправлено 07 Февраль 2012 - 21:56
Это сообщение отредактировано Nordan - 7 февраля 2012 | 22:58
#15
Отправлено 08 Февраль 2012 - 07:40
#16
Отправлено 08 Февраль 2012 - 17:04
Ну тогда все понятно, по проверке гвары происходит перемещение Чузена(override_map_start) и перемещение НПС (critter_attempt_placement), ну а вещи из всяких шкафов (и т.п.) переносятся в свои аналоги на другой карте обычным перемещением инвентаря.
Вопрос исчерпан. ИМХО
Это сообщение отредактировано Nordan - 8 февраля 2012 | 18:51
#17
Отправлено 08 Февраль 2012 - 18:52
#18
Отправлено 08 Февраль 2012 - 18:58
Отправлено: 8 фев 12 20:57
И еще...
Не совсем понял как определять координату гекса по xy.
Допустим у меня есть гекс с номером 28499, по формуле (hex = 200 * y + x) получается что y=124 (28400/200) и x=99. Так чтоль???
Upd: не, не так, конечно переместило в районе этого гекса, но не в нем...
Это сообщение отредактировано Nordan - 8 февраля 2012 | 21:00
#19
Отправлено 08 Февраль 2012 - 21:03
x равняется остатку от деления hex на 200, а y целой части от деления hex на 200.
А вообще, используй макрос override_map_start_hex из maps.h:
#define override_map_start_hex(x,y,z) override_map_start(x%200,x/200,y,z)
#20
Отправлено 08 Февраль 2012 - 21:14
Похожие темы
Название темы | Форум | Автор | Статистика | Последнее сообщение | |
---|---|---|---|---|---|
Вариативность прохождения Fallout 4 |
On the Day the Bombs Dropped | Seventhson |
|
|
|
Есть ли мод для восст. локаций в Fallout 1? |
Мы наш, мы новый... | Capz |
|
|
|
Музыка из игровых локаций F-1 и F-2 |
Весь мир Fallout | Fall |
|
|
|
Точные координаты для всех локаций |
Между Магией и Техникой | Skaarj |
|
|
|
Код на карту секретных локаций |
Стальные братья | Knever |
|
|
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных