Понятно. Жаль, что исходников нет - можно было бы наверное добавить срабатывание плагина в триггере 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

(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 модом возникает такая вот проблема.
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.