ZLoi
Guest
|
|
Re: Миры Fallout и Fallout 2
« Reply #21 on: 01 October 2009, 10:43:49 » |
|
Гигантская и нереальная фантазия. Кому не хотелось увеличить игровое поле в фоле? Наверное, всем. Особенно мододелам. Увеличение игрового поля – это большее количество места для полёта их фантазий. Хоть свой родной город добавляй. Возможно есть для этого путь решения. Банальный, конечно, но… Заменить путь для поиска карты мира с master.dat/art/intrface/wrldmp00.frm на master.dat (data) /art/interface/XX/YY/wrldmpxx.frm это позволит добавлять новые регионы пачками (далее такие пачки называю локальными картами), имея в памяти только необходимые. Где XX и YY – соответственно порядковые номера локальных карт по горизонтали и вертикали (по порядку). Для перехода между локальными картами придется добавлять пограничные зоны, шириной h. Система координат: Выбрать за ноль левую верхнюю точку самой левой верхней локальной карты (XX=00, YY = 00), это позволит связать все локации в единую систему координат. (цитирую кого-то) Положение локации (города) на локальной карте - считается от верхнего левого угла, world_pos=373,122 в пикселях, положение локации (города) будет больше на величину пропущенных экранов. Принимая, что размер локальной карты С*D пикселей (без учета ширины переходных зон). Реально же по краям локальной карты должны быть зоны переходов, то есть само игровое поле размером (С+2h)*(D+2h) Расчетная формула получится: world_pos=XX*C+X_POS,YY*D+Y_POS, где XX – номер локальной карты по горизонтали, YY – номер локальной карты по вертикали, X_POS, Y_POS – координаты локации на локальной карте, при этом чтоб на локальной карте не отображались города из других локальных карт вставить проверку (скриптовать строчку start_state = on/off в файле CITY.TXT), для этого: рассчитать координаты углов экрана: Верхний левый: VLX=Xчуз*C VLY=Yчуз*D Верхний правый: VPX=(Xчуз+1)*C VPY=Yчуз*D Нижний левый: NLX=Xчуз*C NLY=(Yчуз+1)*D Нижний правый: NPX=(Xчуз+1)*C NPY=(Yчуз+1)*D, Здесь Xчуз и Yчуз – номер XX и YY локальной карты, на которой находится Чуз. В файле CITY.TXT используется строчка с параметром world_pos, в данном предложении world_pos хранит в себе координаты города на мировой карте, для локальных карт использовать local_pos, Если VLX,VLY<world_pos<NPX,NPY, то город отображается на карте мира, иначе он пропускается. Для отображения локаций на игровой карте использовать следующие координаты: local_pos = world_pos - XX*C + h, world_pos - YY*C + h то есть переход к старым координатам.h учитывает смещение координат локаций относительно верхнего левого пикселя на ширину зоны перехода между локациями. При движении Чуза по карте мира: По локальной карте движение ничуть не изменилось (старый скрипт) Переход между локальными картами происходит при попадании Чуза на зону перехода, при выходе из зоны Чуз появится на следующей локальной карте: Координаты Чуза: X_POS и Y_POS при движении вправо: загружается блок карт XX/YY+1/wrldmpxx.frm X_POS = h+1, Y_POS = Y_POS при движении влево: загружается блок карт XX/YY-1/wrldmpxx.frm X_POS = С-h-1, Y_POS = Y_POS при движении вниз: загружается блок карт XX+1/YY/wrldmpxx.frm X_POS = X_POS Y_POS = h+1 при движении вверх: загружается блок карт XX-1/YY/wrldmpxx.frm X_POS = X_POS Y_POS = D-h-1 Далее по накатанному (тайлы поменялись, а суть таже) При движении из одной локальной в город другой локальной карты использовать следующее: Расчет пути на мировой карте: (простая алгебра) Путь задается уравнением: y = k*x+b – линейная функция, имеются две координаты: X_POS и Y_POS – координаты Чуза, X_loc и Y_loc – координаты конца пути k = X_POS – X_loc, если k < 0, то конечная локация находится ниже положения Чуза, и наоборот, Чуз движется на Юг. b = Y_loc – k*X_loc параметр VZ рассчитывает движение на Восток/Запад: VZ = Y_POS – Y_loc, если VZ < 0, то Чуз движется на Запад, и наоборот. Если Чуз движется на юго-запад (k < 0, VZ < 0), то необходимо найти в каком месте Чуз подойдет к зонам перехода: X_perehodZ = (Xчуз+1)*C Y_perexodZ = k*(Xчуз+1)*C + b X_perehodS = ((Yчуз+1)*D – b)/k Y_perehodS = (Yчуз+1)*D Теперь проверка, до какой зоны перехода доберётся Чуз: Если X_perehodS > (Xчуз+1)*C, то координаты перехода: X_perehodZ , Y_perexodZ, и наоборот. До этой координаты Чуз добирается по локальной карте, будто там его ждет локация (старый скрипт), после перехода необходима проверка, находится ли город на этой карте, для этого необходимо проверить отобразится ли он. Если start_state = on, до Чуз благополучно доберется до локации. Иначе еще переход… Движение на юго-восток (k < 0, VZ >= 0): X_perehodV = Xчуз*C Y_perexodV = k*Xчуз*C + b X_perehodS = ((Yчуз+1)*D – b)/k Y_perehodS = (Yчуз+1)*D, Теперь проверка, до какой зоны перехода доберётся Чуз: Если X_perehodS > Xчуз*C, то координаты перехода: X_perehodS , Y_perexodS, и наоборот. Остальное также. Движение на северо-запад (k >= 0, VZ < 0): X_perehodZ = (Xчуз+1)*C Y_perexodZ = k*(Xчуз+1)*C + b X_perehodN = (Yчуз*D – b)/k Y_perehodN = Yчуз*D, Проверка, до какой зоны перехода доберётся Чуз: Если X_perehodN > Xчуз*C, то координаты перехода: X_perehodZ , Y_perexodZ, и наоборот. План тот же. Формулы для северо-востока (k >= 0, VZ >= 0): X_perehodV = Xчуз*C Y_perexodV = k*Xчуз*C + b X_perehodN = (Yчуз*D – b)/k Y_perehodN = Yчуз*D, Проверка, до какой зоны перехода доберётся Чуз: Если X_perehodN > Xчуз*C, то координаты перехода: X_perehodN , Y_perexodN, и наоборот. Без объяснений. Путь до файла Worldmap.txt удлинить на папку worldXX, непосредственно в сам Worldmap.txt добавить nodeYY, либо заменить Worldmap.txt на WorldmapXX.txt с разделами nodeYY. Этот шаг позволит описать все квадраты тайлов локальных карт по известной уже мододелам схеме. Ничего не понимаю в смещениях и скриптировании. Если всё это воплотить в жизнь, то возможен новый шквал модов и аддонов. Глупая и заумная идея, да?
|