Current time: 10.05.2024, 02:06 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
HD-mod. Баги и доработки
Author Message
baratorch Offline

Posts: 197
Post: #28

(23.11.2020 23:29)Berserker Wrote:  feanor, полностью согласен, что решение должно опираться на индекс кадра, а не имя картинки внутри def.

В хота с 32 битными def и def из 8-битных pcx-ов , в хд-моде с def из 16(32)-битных pcx-ов (иконки свитков-артефактов в слотах, иконки существ в очереди битвы, которые создаются программно из имеющейся в оригинальной игре графики)
используется создание своего кастомного def, с нужным форматом кадра
и хук на отрисовку кадра, в котором проверяем поле type, которое есть у всех ресурсов, и, в зависимости от значения type используем нужную функцию отрисовки.

Вот 1 функция создания дефа иконок для очереди существ и 1 хук:
Code:
        // Виртуальные методы PcxSprite: никогда не уничтожаем и не уменьшаем ref_count.
        __HOOK_FUNC void __fastcall PcxSprite_Destroy(_Def_* this_, _dword_ no_used, _bool8_ delete_) {}
        __HOOK_FUNC void __fastcall PcxSprite_DerefOrDestruct(_Def_* this_, _dword_ no_used) {}
        // Виртуальная таблица PcxSprite.
        _ptr_ PcxSprite_v_table[3] = { (_ptr_)PcxSprite_Destroy, (_ptr_)PcxSprite_DerefOrDestruct, 0x47B670/*_Def_::get_mem_usage*/ };

        void CreateBqCreaturesDef()
        {
            auto s = _Def_::Load("TwCrPort.def");

            _Def_* d = (_Def_*)o_New(sizeof(_Def_));
            MemZero(d, sizeof(_Def_));

            // Выгрузка-уничтожение не предполагается.
            d->v_table = PcxSprite_v_table;

            // Тип def`а - интерфейс.
            d->type = 0x47; // Interface def

            strcpy(d->name, "def.BqCrPort"); //-V512

            // Создаём 1 группу.
            d->groups_count = 1;
            d->groups = (_DefGroup_**)o_New(4 * d->groups_count);
            d->active_groups = (_ptr_)o_New(4 * d->groups_count);
            // _Def_::AllocGroup(this, group_index, frames_num)
            CALL_3(void, __thiscall, 0x47B410, d, 0, s->groups[0]->frames_count);

            _Pcx16_* ps = _Pcx16_::CreateNew("", s->width, s->height);

            // Добавляем pcx`ы вместо кадра.
            for (int i = 0; i < s->groups[0]->frames_count; i++)
            {
                s->DrawInterfaceToPcx16(0, i, ps, 0, 0);
                _Pcx16_* pd = _Pcx16_::CreateNew("", 37, 39);
                pd->DrawPcx16ResizedBicubic(ps, ps->width, ps->height, 0, 0, 37, 39);
                pd->Sharpen(0.14);

                // _Def_::AddFrame(this, group_index, frame)
                pd->type = 0x12;
                CALL_3(void, __thiscall, 0x47B480, d, 0, pd);
            }

            _Pcx16_::Delete(ps);
            s->DerefOrDestruct();

            d->width = 37;
            d->height = 39;

            def_BqCrPort = hdv(_Def_*, "HD.def.BqCrPort") = d;
            o_BinTreeHead.AddItem(def_BqCrPort, def_BqCrPort->name);
            def_BqCrPort->ref_count = 1;
        }

Code:
        // Делаем возможной отрисовку кадра def`а - pcx.
        __HOOK_FUNC void __stdcall N_DefFrame_DrawUI(HiHook* h, _DefFrame_* this_, int sx, int sy, int sw, int sh, _ptr_ dst, int dx, int dy, int dw, int dh, int dpitch, _Palette16_* p16, _bool8_ hflip, _bool8_ tblit)
        {
            // Тип ресурса - _Pcx16_.
            if (this_->type == 0x12 /*_Pcx16_ type*/)
            {
                //D_OFF(g, "DefFrame type == 0x12 from 0x%.8X", h->GetReturnAddress() - 5);
                // Рисуем _Pcx16_.
                CALL_12(void, __thiscall, 0x44DF80, this_, sx, sy, sw, sh, dst, dx, dy, dw, dh, dpitch, 3);
            }
            else
            {
                CALL_14(void, __thiscall, h->GetDefaultFunc(), this_, sx, sy, sw, sh, dst, dx, dy, dw, dh, dpitch, p16, hflip, tblit);
            }
        }

Плюс такого подхода в высокой совместимости со сторонними решениями с другими форматами кадров. Я и Сав никак не синхронизируем разработку (ну, после выбора варианта решения) своих кастомных def в Хд и Хота и все это работает как задумано вместе.
(This post was last modified: 24.11.2020 14:25 by baratorch.)
24.11.2020 14:25
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Messages In This Thread
HD-mod. Баги и доработки - Berserker - 22.11.2020, 06:32
RE: Техническая тема по HD-mod - igrik - 24.01.2021, 00:57
RE: Техническая тема по HD-mod - baratorch - 09.02.2021, 18:04
RE: Техническая тема по HD-mod - igrik - 10.02.2021, 12:11
RE: Техническая тема по HD-mod - daemon_n - 09.02.2021, 18:26
RE: Техническая тема по HD-mod - daemon_n - 09.02.2021, 21:42
RE: Техническая тема по HD-mod - igrik - 12.02.2021, 10:55
RE: Техническая тема по HD-mod - Panda - 13.02.2021, 00:16
RE: HD-mod. Баги и доработки - ilya - 07.05.2021, 20:06
RE: HD-mod. Баги и доработки - daemon_n - 24.05.2021, 09:44
RE: HD-mod. Баги и доработки - Berserker - 08.05.2021, 07:14
RE: HD-mod. Баги и доработки - baratorch - 26.06.2021, 07:43
RE: HD-mod. Баги и доработки - Shishgun - 30.05.2021, 09:34
RE: HD-mod. Баги и доработки - Valery - 30.05.2021, 17:32
RE: HD-mod. Баги и доработки - daemon_n - 31.05.2021, 15:56
RE: HD-mod. Баги и доработки - Valery - 01.06.2021, 02:38
RE: HD-mod. Баги и доработки - Berserker - 31.05.2021, 16:54
RE: HD-mod. Баги и доработки - XEPOMAHT - 01.06.2021, 17:12
RE: HD-mod. Баги и доработки - igrik - 01.06.2021, 18:52
RE: HD-mod. Баги и доработки - daemon_n - 31.05.2021, 17:44
RE: HD-mod. Баги и доработки - Berserker - 31.05.2021, 18:04
RE: HD-mod. Баги и доработки - igrik - 31.05.2021, 21:18
RE: HD-mod. Баги и доработки - Berserker - 31.05.2021, 21:34
RE: HD-mod. Баги и доработки - igrik - 31.05.2021, 22:18
RE: HD-mod. Баги и доработки - Berserker - 31.05.2021, 23:30
RE: HD-mod. Баги и доработки - daemon_n - 01.06.2021, 02:11
RE: HD-mod. Баги и доработки - Berserker - 01.06.2021, 02:28
RE: HD-mod. Баги и доработки - daemon_n - 01.06.2021, 03:58
RE: HD-mod. Баги и доработки - Berserker - 01.06.2021, 04:54
RE: HD-mod. Баги и доработки - Berserker - 01.06.2021, 19:47
RE: HD-mod. Баги и доработки - Panda - 26.06.2021, 07:53
RE: HD-mod. Баги и доработки - Berserker - 26.06.2021, 18:58
RE: HD-mod. Баги и доработки - Panda - 30.06.2021, 10:13
RE: HD-mod. Баги и доработки - Berserker - 18.09.2021, 20:32
RE: HD-mod. Баги и доработки - Berserker - 19.09.2021, 21:31
RE: HD мод - daemon_n - 22.11.2020, 06:47
RE: HD мод - Grossmaster - 22.11.2020, 09:57
RE: HD мод - daemon_n - 22.11.2020, 10:15
RE: HD мод - baratorch - 22.11.2020, 12:08
RE: HD мод - baratorch - 22.11.2020, 12:24
RE: HD мод - daemon_n - 22.11.2020, 12:32
RE: HD мод - Raistlin - 22.11.2020, 13:35
RE: HD мод - Berserker - 22.11.2020, 16:29
RE: HD мод - igrik - 22.11.2020, 18:27
RE: HD мод - Berserker - 22.11.2020, 18:34
RE: HD мод - igrik - 22.11.2020, 18:42
RE: HD мод - Berserker - 22.11.2020, 19:08
RE: HD мод - Berserker - 23.11.2020, 00:45
RE: HD мод - Raistlin - 23.11.2020, 03:00
RE: HD мод - Berserker - 23.11.2020, 03:33
RE: HD мод - Raistlin - 23.11.2020, 03:36
RE: HD мод - XEPOMAHT - 23.11.2020, 11:12
RE: HD мод - Raistlin - 23.11.2020, 20:02
RE: HD мод - feanor - 23.11.2020, 21:10
RE: HD мод - Berserker - 23.11.2020, 22:16
RE: HD мод - feanor - 23.11.2020, 22:45
RE: HD мод - XEPOMAHT - 23.11.2020, 22:54
RE: HD мод - Berserker - 23.11.2020, 23:29
RE: HD мод - feanor - 24.11.2020, 00:06
RE: HD мод - XEPOMAHT - 24.11.2020, 00:20
RE: HD мод - daemon_n - 24.11.2020, 02:50
RE: HD мод - baratorch - 24.11.2020 14:25
RE: HD мод - Berserker - 24.11.2020, 17:45
RE: HD мод - baratorch - 24.11.2020, 21:32
RE: HD мод - Raistlin - 24.11.2020, 22:09
RE: HD мод - Berserker - 24.11.2020, 22:30
RE: HD мод - RoseKavalier - 25.11.2020, 02:32
RE: HD мод - daemon_n - 25.11.2020, 05:13
RE: HD мод - baratorch - 25.11.2020, 11:50
RE: HD мод - baratorch - 25.11.2020, 12:10
RE: HD мод - igrik - 25.11.2020, 17:37
RE: HD мод - baratorch - 25.11.2020, 18:46
RE: HD мод - baratorch - 25.11.2020, 19:41
RE: HD мод - igrik - 25.11.2020, 19:50
RE: HD мод - igrik - 26.11.2020, 02:04
RE: HD мод - Berserker - 26.11.2020, 02:07
RE: HD мод - Berserker - 26.11.2020, 08:00
RE: HD мод - baratorch - 26.11.2020, 09:30
RE: HD мод - Berserker - 26.11.2020, 09:47
RE: HD мод - baratorch - 26.11.2020, 15:45
RE: HD мод - Berserker - 26.11.2020, 16:40
RE: HD мод - XEPOMAHT - 26.11.2020, 17:32
RE: HD мод - igrik - 26.11.2020, 18:10
RE: HD мод - XEPOMAHT - 26.11.2020, 18:19
RE: HD мод - igrik - 26.11.2020, 18:25
RE: HD мод - XEPOMAHT - 26.11.2020, 18:30
RE: HD мод - igrik - 26.11.2020, 18:34
RE: HD мод - XEPOMAHT - 26.11.2020, 18:50
RE: HD мод - igrik - 26.11.2020, 19:02
RE: HD мод - daemon_n - 26.11.2020, 20:58
RE: HD мод - Berserker - 27.11.2020, 00:29
RE: HD мод - XEPOMAHT - 27.11.2020, 01:34
RE: HD мод - Berserker - 27.11.2020, 01:54
RE: HD мод - V_Maiko - 27.11.2020, 02:45
RE: HD мод - Berserker - 27.11.2020, 07:26
RE: HD мод - Archer30 - 27.11.2020, 08:37
RE: HD мод - XEPOMAHT - 27.11.2020, 12:00
RE: HD мод - igrik - 27.11.2020, 12:05
RE: HD мод - PerryR - 27.11.2020, 12:06
RE: HD мод - daemon_n - 27.11.2020, 12:19
RE: HD мод - XEPOMAHT - 27.11.2020, 12:22
RE: HD мод - baratorch - 27.11.2020, 13:40
RE: HD мод - baratorch - 27.11.2020, 14:06
RE: HD мод - XEPOMAHT - 27.11.2020, 14:35
RE: HD мод - Berserker - 27.11.2020, 15:09
RE: HD мод - baratorch - 27.11.2020, 15:31
RE: HD мод - XEPOMAHT - 27.11.2020, 16:49
RE: HD мод - Archer30 - 27.11.2020, 20:22
RE: HD мод - Berserker - 27.11.2020, 21:05
RE: HD мод - Archer30 - 27.11.2020, 21:56
RE: HD мод - baratorch - 28.11.2020, 09:26
RE: HD мод - Panda - 28.11.2020, 14:39
RE: HD мод - Berserker - 28.11.2020, 15:36
RE: HD мод - Panda - 28.11.2020, 16:30
RE: HD мод - daemon_n - 28.11.2020, 17:14
RE: HD мод - Berserker - 29.11.2020, 03:28
RE: HD мод - Panda - 29.11.2020, 03:55
RE: HD мод - daemon_n - 29.11.2020, 13:15
RE: HD мод - baratorch - 29.11.2020, 14:28
RE: HD мод - XEPOMAHT - 29.11.2020, 15:39
RE: HD мод - baratorch - 29.11.2020, 18:29
RE: HD мод - Berserker - 29.11.2020, 19:28
RE: HD мод - Berserker - 30.11.2020, 08:08
RE: HD мод - baratorch - 01.12.2020, 15:37
RE: HD мод - Berserker - 05.12.2020, 00:37
RE: HD мод - baratorch - 05.12.2020, 06:55
RE: HD мод - Berserker - 05.12.2020, 09:09
RE: HD мод - igrik - 05.12.2020, 15:22
RE: HD мод - Berserker - 05.12.2020, 17:51
RE: HD мод - baratorch - 05.12.2020, 18:20
RE: HD мод - Berserker - 05.12.2020, 19:03
RE: HD мод - Berserker - 05.12.2020, 20:59
RE: HD мод - Berserker - 06.12.2020, 08:31
RE: HD мод - Berserker - 06.12.2020, 09:08
RE: HD мод - igrik - 06.12.2020, 10:29
RE: HD мод - Berserker - 06.12.2020, 17:31
RE: HD мод - baratorch - 06.12.2020, 19:24
RE: HD мод - Berserker - 06.12.2020, 20:04
RE: HD мод - igrik - 12.12.2020, 16:51
RE: HD-mod - XEPOMAHT - 14.12.2020, 17:13
RE: HD-mod - Berserker - 21.12.2020, 02:12
RE: HD-mod - baratorch - 25.12.2020, 12:50
RE: HD-mod. Общая тема - Berserker - 28.03.2021, 05:55

Forum Jump:

Powered by MyBB Copyright © 2002-2024 MyBB Group