Wake of Gods Forum | Форум Во Имя Богов

Full Version: ERA II
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
pac, исправил Rolleyes

Quote:И я так и не понял, чем это так необходимо. Ведь все подгружаемые по-умолчанию lod'ы известны поимённо.
Неизвестны. Какое-нибудь золотое, серебрянное или просто пользовательское собрание вполне может иметь незагружаемый Содом, но вредоносный лод. Это может быть локализация или какой-нибудь урезанный вариант, но с расширением lod. Понять, в чём ошибка, как доказал кастрированный файл клинка армагеддона, весьма сложно.

Quote:Сортировка в алфавитном порядке - такой же рандом при lod'ах разных модов, ибо никто не знает, как назовёт другой.
Во-первых, не рандом. Можно даже батником переименовать имеющиеся лоды в циферные варианты. Во-вторых, операции с файловой системой - самое простое, что доступно пользователю: удалить, скопировать, переименовать.

Можно сделать консольную прогу в инсталляторе, которая построет список паков и сгенерирует автоматический префикс выше/ниже приоритетом. Это то, что распространяется на всех и может быть автоматизированно. Батники же нужно стандартизировать (ты с командной строки запускаешь? Я с run.bat, а он с go.bat...) и вручную редактировать даже если нет конфликта между архивами. Такой подход напоминает мне установку порядка для заплаток и модулей: тоже через списки и тоже вручную. Бррр...

Quote:Просто иногда...
То иногда, а то для всех )

Все большое спасибо за помощь, Саву в том числе и за плагин.
Berserker Wrote:То иногда, а то для всех )
Я понимаю. Я просто пытаюсь показать, что мой плагин может быть полезен не только своим исходником. Sm
Давно хотел написать еще..в SDK лучше избегать имен переменных типа x и y - вместо них юзать что-то типа xvar и yvar.
Для СИ++ только. Ок.
Вышел русский релиз версии 1.9. Подробности в первом сообщении.
XXL PO Fix
Модуль позволяет играть со скриптами, использующими ERM команду PO.
Вдруг кто захочет оптимизировать, вот исходник:
Code:
LIBRARY Po;
USES Windows, SysUtils, Era;

CONST
  SECOND_DIM_SIZE   = 256 * 2 * 4;
  SECOND_DIM_SIZE2  = 256 * 2 * 16;
  SQUARES_SIZE      = 256 * 256 * 2 * 4;
  SQUARES2_SIZE     = 256 * 256 * 2 * 16;

TYPE
  PSquare = ^TSquare;
  TSquare = INTEGER;
  
  PSquare2  = ^TSquare2;
  TSquare2  = PACKED ARRAY [0..3] OF INTEGER;
  
  PPOINTER  = ^POINTER;


CONST
  ErmSquare:  ^PSquare  = Ptr($27C9678);
  ErmSquare2: ^PSquare2 = Ptr($9A48A0);


VAR
  Squares:  PACKED ARRAY [0..255, 0..255, 0..1] OF TSquare;
  Squares2: PACKED ARRAY [0..255, 0..255, 0..1] OF TSquare2;


PROCEDURE OnAfterWoG (Event: Era.PEvent); STDCALL;
BEGIN
  // Patch Squares
  PPOINTER($73644C)^  :=  @Squares;
  PPOINTER($73BB32)^  :=  @Squares;
  PPOINTER($73BE35)^  :=  @Squares;
  PPOINTER($75118F)^  :=  @Squares;
  PPOINTER($751975)^  :=  @Squares;
  PPOINTER($752B68)^  :=  @Squares;
  PPOINTER($752B87)^  :=  @Squares;
  PPOINTER($752BA0)^  :=  @Squares;
  PPOINTER($752BBF)^  :=  @Squares;
  PPOINTER($752BD8)^  :=  @Squares;
  PPOINTER($752BF6)^  :=  @Squares;
  PPOINTER($752C0F)^  :=  @Squares;
  PPOINTER($752C2E)^  :=  @Squares;
  PPOINTER($752C47)^  :=  @Squares;
  PPOINTER($752C66)^  :=  @Squares;
  // Patch Squares2
  PPOINTER($73BB51)^  :=  @Squares2;
  PPOINTER($751582)^  :=  @Squares2;
  PPOINTER($752472)^  :=  @Squares2;
  PPOINTER($752FA4)^  :=  @Squares2;
  // Patch calculating Squares addresses
  PINTEGER($736442)^  :=  SECOND_DIM_SIZE;
  PINTEGER($73BB28)^  :=  SECOND_DIM_SIZE;
  PINTEGER($73BE2B)^  :=  SECOND_DIM_SIZE;
  PINTEGER($75118A)^  :=  SQUARES_SIZE;
  PINTEGER($751970)^  :=  SQUARES_SIZE;
  PINTEGER($752B5E)^  :=  SECOND_DIM_SIZE;
  PINTEGER($752B7D)^  :=  SECOND_DIM_SIZE;
  PINTEGER($752B96)^  :=  SECOND_DIM_SIZE;
  PINTEGER($752BB5)^  :=  SECOND_DIM_SIZE;
  PINTEGER($752BCE)^  :=  SECOND_DIM_SIZE;
  PINTEGER($752BEC)^  :=  SECOND_DIM_SIZE;
  PINTEGER($752C05)^  :=  SECOND_DIM_SIZE;
  PINTEGER($752C24)^  :=  SECOND_DIM_SIZE;
  PINTEGER($752C3D)^  :=  SECOND_DIM_SIZE;
  PINTEGER($752C5C)^  :=  SECOND_DIM_SIZE;
  // Patch calculating Squares2 addresses
  PINTEGER($73BB44)^  :=  SECOND_DIM_SIZE2;
  PINTEGER($75157D)^  :=  SQUARES2_SIZE;
  PINTEGER($75246D)^  :=  SQUARES2_SIZE;
  PINTEGER($752FBD)^  :=  SQUARES2_SIZE;
  // Fix cycles
  PINTEGER($752B14)^  :=  256;
  PINTEGER($752B33)^  :=  256;
END; // .PROCEDURE OnAfterWoG

BEGIN
  Era.RegisterHandler(OnAfterWoG, 'OnAfterWoG');
END.
FallenAngel Wrote:Sav, ну, по крайней мере у меня эра 1.9 без них не может делать рандомные карты и выбирать конфлюкс.
Berserker Wrote:
Quote:к тому же убранное в ВоГе
Не убранное.
http://dl.dropbox.com/u/21241104/Differe...tfiles.zip Beee
Сав перешёл на си++? )
Да мне всегда c-подобные языки больше нравились.

Так-то я и паскаль и c знаю одинаково хреново, поэтому писал на том, для чего был пример (плагин MoP'a для палатки).

Теперь вроде как появилась возможность перейти на c++. Правда, с этим дурацким тамошним ассемблером не знаю, стоит ли. Sm
Кстати вопрос snd и vid архивы пока нельзя подгружать в виде pak'ов?
Пока нет.
(29.08.2011 00:17)Sav Wrote: [ -> ]Теперь вроде как появилась возможность перейти на c++. Правда, с этим дурацким тамошним ассемблером не знаю, стоит ли. Sm

Причём у меня на MSVC твой на код ассемблере, скорее всего, не пойдёт даже переделанный, а нужно будет отдельный асмовский файл создавать.
Юзай MSVS.
Там асм поприличней.
Или директиву .intel_syntax noprefix для гцц-шных асмов.
Quote: asm("mov $3, %eax");
а че такое $3, и зачем перед еах - % ?
я какбэ и в msvs достаточно с асмом поработал и тут недавно masm32 и fasm скачал, попрактиковался. но процитированный код меня пугает.

Quote:Причём у меня на MSVC твой на код ассемблере, скорее всего, не пойдёт даже переделанный, а нужно будет отдельный асмовский файл создавать.
с помощью __asm _emit и макросов в ms vc++ можно же реализовать любую недоступную инструкцию
Reference URL's