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.
Понятно. Жаль, что исходников нет - можно было бы наверное добавить срабатывание плагина в триггере OnSetupBattlefield и получить полный рамдом pcx на боевых полях. Хотя и текущее состояние плагина вполне устраивает (тем более для меня - плохого игрока, часто использующего загрузку сохранений).
XEPOMAHT, если pcx загружается после данного триггера и освобождается после боя, то вполне можно. И дай, плагин банально использует АПИ ЭРЫ: RedirectFile.
Code:
LIBRARY RandomSkin;
{
DESCRIPTION:  Random skin plugin for Era
AUTHOR:       Alexander Shostak (aka Berserker aka EtherniDee aka BerSoft)
}

USES
  Utils, SysUtils, Era, Lists, Files, StrLib;
  
CONST
  RANDOM_SKIN_FOLDER  = 'Data\RandomSkin';


VAR
{o} RandomSets: {O} Lists.TList {OF Lists.TStringList};


PROCEDURE RandomizeSkin;
VAR
{U} RandomSet:  Lists.TStringList;
    i:          INTEGER;
  
BEGIN
  RandomSet :=  NIL;
  // * * * * * //
  FOR i := 0 TO RandomSets.Count - 1 DO BEGIN
    RandomSet :=  RandomSets[i];
    Era.GlobalRedirectFile(PCHAR(RandomSet[0]), PCHAR(RandomSet[Random(RandomSet.Count)]));
  END; // .FOR
END; // .PROCEDURE RandomizeSkin

FUNCTION LoadSettingsFile (SearchRec: SysUtils.TSearchRec): BOOLEAN; (* ContSearch? *)
VAR
{U} RandomSet:    Lists.TStringList;
    FileContents: STRING;
    SkinSets:     Utils.TArrayOfString;
    SetItems:     Utils.TArrayOfString;
    i, j:         INTEGER;

BEGIN
  RandomSet :=  NIL;
  // * * * * * //

  IF
    (SearchRec.Size > 0)  AND
    Files.ReadFileContents(RANDOM_SKIN_FOLDER + '\' + SearchRec.Name, FileContents)
  THEN BEGIN
    SkinSets  :=  StrLib.Explode(FileContents, '*');
    
    FOR i := 0 TO HIGH(SkinSets) DO BEGIN
      RandomSet :=  Lists.NewSimpleStrList;
      SetItems  :=  StrLib.Explode(SkinSets[i], #13#10);
      
      FOR j := 0 TO HIGH(SetItems) DO BEGIN
        SetItems[j] :=  SysUtils.Trim(SetItems[j]);
        
        IF SetItems[j] <> '' THEN BEGIN
          RandomSet.Add(SetItems[j]);
        END; // .IF
      END; // .FOR
      
      IF RandomSet.Count = 0 THEN BEGIN
        SysUtils.FreeAndNil(RandomSet);
      END // .IF
      ELSE BEGIN
        RandomSets.Add(RandomSet); RandomSet := NIL;
      END; // .ELSE
    END; // .FOR
  END; // .IF
  
  RESULT  :=  TRUE;
END; // .FUNCTION LoadSettingsFile

PROCEDURE LoadSettings;
BEGIN
  Files.Scan
  (
    RANDOM_SKIN_FOLDER + '\*.txt',
    Files.faNotDirectory,
    '.txt',
    LoadSettingsFile
  );
END; // .PROCEDURE LoadSettings
  
PROCEDURE OnBeforeErmInstructions (Event: Era.PEvent); STDCALL;
BEGIN
  RandomizeSkin;
END; // .PROCEDURE OnBeforeErmInstructions

PROCEDURE OnAfterLoadGame (Event: Era.PEvent); STDCALL;
BEGIN
  RandomizeSkin;
END; // .PROCEDURE OnAfterLoadGame

PROCEDURE OnAfterWoG (Event: Era.PEvent); STDCALL;
BEGIN
  LoadSettings;
  RandomizeSkin;
END; // .PROCEDURE OnAfterWoG

BEGIN
  Randomize;
  RandomSets  :=  Lists.NewStrictList(Lists.TStringList);
  
  Era.RegisterHandler(OnAfterWoG, 'OnAfterWoG');
  Era.RegisterHandler(OnBeforeErmInstructions, 'OnBeforeErmInstructions');
  Era.RegisterHandler(OnAfterLoadGame, 'OnAfterLoadGame');
END.


Думаешь, стоит вызывать выбор случайных pcx и перед боем?
So, a bit of reporting, as I started finally test with tew4 which is heavily scripted. The first problem I ran in was that if you install Homm+HD+era, it will ask you to reinstall HD because patcher not updated. Installing Homm+era+HD is fine.

Then game runs perfect, only played 2 weeks or so, but pushed all buttons, activated 18 interface mods, until now looks great and I love the new fonts for experience screen + the display of values for luck/morale, thx to whoever worked on them (igrik?).

And thx to Bersy for coming back from marriage clouds to finalize his master work. ))
Great thanks to igrik and many other guys, including you, Val. Without you any work would be senseless )
And I'm still in marriage clouds, working on ability to load and png/bmp/jpeg as in-game pcx16 image with scaling support.

Code:
i := ResizeBmp24(LoadImageAsBmp24('D:\a4.jpg'), 800, 600, FREE_ORIGINAL_BMP);
ResourceTree.AddItem(Bmp24ToPcx16(i, 'zpic1005.pcx'));
well, hope you are in great shape, such a beautiful photo 126
(24.12.2017 21:34)Berserker Wrote: [ -> ]Думаешь, стоит вызывать выбор случайных pcx и перед боем?

Можно и перед боем, но с проверкой байта 0х91F6C7. Но лучше именно в OnSetupBattlefield несмотря на то, что там боевое поле уже загружено (т.е. pcx полей будут измены на следующую битву, а в эту битву увидим то, что выпало при загрузке игры или сохранении).
XEPOMAHT, пока возражений нет и проблем с другими ресурсами не вижу (да, холостая генерация может чутку испортить общее качество ГСЧ, но нужно тестировать).
Valery, ))
(25.12.2017 00:56)Berserker Wrote: [ -> ]And I'm still in marriage clouds, working on ability to load and png/bmp/jpeg as in-game pcx16 image with scaling support.

Code:
i := ResizeBmp24(LoadImageAsBmp24('D:\a4.jpg'), 800, 600, FREE_ORIGINAL_BMP);
ResourceTree.AddItem(Bmp24ToPcx16(i, 'zpic1005.pcx'));
Berserker, дай мне эту dll-ку, чтобы я мог продолжить IF:E/D
С загрузкой большинства типов изображений и ограничениями менеджера ресурсов (уникальные 12-символьные имена) разобрался, мастер igrik, если получится, порадует всех очередной заменой IF:E/D диалогов на родные (кроме гиф-анимации и проигрывания видео). В настоящее время масштабирование линейное, билинейное тормозило, библиотеки пока не пробовал.
XEPOMAHT, я добавил в веб-папку Plugins плагин RandomSkin. Попробуй, пожалуйста. Должен теперь в OnSetupBattlefield срабатывать. Там же исходник. Можно переписать на чём угодно.
Berserker, спасибо! Рамдомизация боевых полей работает как надо. Только расширение нужно сменить на .era, чтобы замена pcx в главном меню тоже работала.
XEPOMAHT, на здоровье! Отлично ) Можно награбить полей отовсюду и выпускать мини-мод ))
Berserker, в этом графическом режиме (фильтре) с HD модом возникает такая вот проблема.
скрины (Click to View)
Following a bug complain in HC, I updated "monsters drop resources" script, as it didn't check if mithril is enabled, thus wasted a lot of rewards with mithril which could not be used.

monsters drop resources.erm

Modifications :
Valery, cannot find such script in WoG package.
Reference URL's