Current time: 13.04.2024, 18:13 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
Исследования игрового формата карт
» технические вопросы
Author Message
Berserker Offline
Administrators

Posts: 16471
Post: #61

Формат файлов кампаний:

Code:
Heroes 3 Campaign (h3c) format after unpacking (gz).
=================================
byte    = 1 byte (0..255)
word    = 2 bytes (0..65535)
integer = 4 bytes (-2147483648..2147483647)
boolean = 1 byte (0 = false, 1 = true)
---------------------------------
const
  (* Hardcoded in camptext.txt, differs for each campaign index. Number of zones in current campaign *)
  NUM_ZONES = ?;

var
  Header: THeader;
  Zones:  array NUM_ZONES of TZone;
  Maps:   array NUM_ZONES of TMap | None;

type
  TString = record
    Length: integer;
    Value:  array Length of char;
  end;

  THeader = record
    GameVersion:             integer = 5 (Armageddon Blade) | 6 (WoG);
    CampaignInd:             byte; // Index of campaign (from 0), see camptext.txt
    CampaignName:            TString;
    CampaignDesc:            TString; // Description
    UserCanSelectDifficulty: boolean;
    MusicTheme:              byte;
  end; // THeader

  TZonePrologue = record
    HasPrologue: boolean;

    if HasPrologue then
      VideoId: byte;
      MusicId: byte;
      Text:    TString;
    end;
  end;

  TZoneEpilogue = record
    HasEpilogue: boolean;

    if HasEpilogue then
      VideoId: byte;
      MusicId: byte;
      Text:    TString;
    end;
  end;

  TStartingOpts = record
    OptsType: byte; // StartingBonus = 1, CrossoverHero = 2, InitialHero = 3

    if OptsType = 1 then
      PlayerColor: byte;
      NumBonuses:  byte;
      Bonuses:     array NumBonuses of record
        BonusType: byte;

        if Bonuses = 0 (spell) then
          Hero:  word; 65023 for most powerful hero
          Spell: byte;
        end;

        if Bonuses = 1 (creature) then
          Creature: word;
          Number:   word;
        end;

        if Bonuses = 3 (artifact) then
          Hero: word;
          Art:  word;
        end;

        if Bonuses = 4 (spell scroll) then
          Hero:  word;
          Spell: byte;
        end

        if Bonuses = 5 (primary skills) then
          Hero:       word;
          PrimSkills: array 4] of byte;
        end;

        if Bonuses = 6 (secondary skill) then
          Hero:     word;
          SecSkill: byte;
          Level:    byte;
        end;

        if Bonuses = 7 (resource) then
          Resource: byte;
          Quantity: integer;
        end;
      end; // Bonuses
    end; // if

    if OptsType = 2 then
      PlayerColor: byte;
      ZoneIndex:   byte;
    end;
  end; // .TStartingOpts

  TZone = record
    FileName:           TString;
    FileSize:           integer;
    RequiredZones:      byte; // Zone prerequisites; bitmask: 1 bit for each zone
    ZoneColor:          byte;
    DifficultyLevel:    byte;
    RegionRmbText:      TString; // Right mouse button hint
    Prologue:           TZonePrologue;
    Epilogue:           TZoneEpilogue;
    HeroesRetain:       byte; // Bitmask of Experience (bit 0), Primary Skills (bit 1), Secondary Skills (bit 2), Spells (bit 3), Artifacts (bit 4)
    CrossoverCreatures: array of 19 bytes; // 1 bit for every creature. Creature ID: 0..159
    CrossoverArts:      array of 18 bytes; // 1 bit for every artifact. Artifact ID: 0..143
    StartingOpts:       TStartingOpts;
  end;

  TMap = unpacked h3m (gz) map


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
14.07.2019 23:59
Find all posts by this user Quote this message in a reply
feanor Offline

Posts: 622
Post: #62

Слушайте, а кто-нибудь занимался добавлением/редактированием карт кампаний? Ну, на всякий случай, чтобы лишнюю работу не делать?

(И да, таблицу я нашел, только к таблице не всё сводится)
27.04.2021 12:39
Find all posts by this user Quote this message in a reply
daemon_n Offline
Administrators

Posts: 4338
Post: #63

feanor, я занимался, если ты говоришь о простом изменении.

Просто извлекаем карты через редактор кампаний, затем редачим в редакторе карт, затем обратно упаковываем.

Если не оно, то иду дальше мимо 105


Image: widget.png?style=banner2

Новейший Heroes 3 Launcher
27.04.2021 14:19
Visit this user's website Find all posts by this user Quote this message in a reply
feanor Offline

Posts: 622
Post: #64

Ээ, нет.
Имеются в виду те карты, которые сбоку. Раскладки, шаблоны, черт его знает, как их назвать.

Интересует изменение количества карт в шаблоне и добавление новых, в первую очередь.
27.04.2021 16:17
Find all posts by this user Quote this message in a reply
XEPOMAHT Offline
Moderators

Posts: 2271
Post: #65

(27.04.2021 16:17)feanor Wrote:  Интересует изменение количества карт в шаблоне и добавление новых, в первую очередь.

Номер шаблона меняешь и дозапаковываешь новые карты. Максимум - 12 карт на кампанию, если скляроз не изменяет.
27.04.2021 17:29
Find all posts by this user Quote this message in a reply
feanor Offline

Posts: 622
Post: #66

Ээ, а смысл, если можно просто сделать сразу в нужном?
Дело в том, что в стоке шаблон с 11 картами один, кажца, а нужно два минимум.
Quote:Максимум - 12 карт на кампанию, если скляроз не изменяет.
11, кажется, где-то в SoD.
А технически, наверное, 16, там битовое поле двухбайтовое.

Ладно, понял.
Просто я расширяю таблицу, копирую данные, меняю индекс в файле кампании, а оно вылетает, причем где-то в совершенно иррелевантном месте. И даже если делаю то же c существующим слотом (копирую данные от другого шаблона с другим количеством карт) - та ж фигня.
То ли там еще какая-то таблица/свитч, то ли что-то пошло не так.
28.04.2021 11:36
Find all posts by this user Quote this message in a reply
XEPOMAHT Offline
Moderators

Posts: 2271
Post: #67

(28.04.2021 11:36)feanor Wrote:  Просто я расширяю таблицу, копирую данные, меняю индекс в файле кампании, а оно вылетает, причем где-то в совершенно иррелевантном месте. И даже если делаю то же c существующим слотом (копирую данные от другого шаблона с другим количеством карт) - та ж фигня.
То ли там еще какая-то таблица/свитч, то ли что-то пошло не так.

Проще добавить собственный диалог кампаний на DL например (в MoP хоть 100 новых диалогов в главное меню суй - игра с ними работает без проблем с помощью WERD), нежели пытаться пропатчить существующий (там выделяется стековая память на данные диалога + традиционные захардкоренные геройские _dlg_-структуры с адресами на загрузку/выгрузку/уничтожение и т.д., лично я такие штуки стараюсь не трогать).
28.04.2021 14:40
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Forum Jump:

Powered by MyBB Copyright © 2002-2024 MyBB Group