Вопросы по моддингу

Копошимся во внутренностях игр и даем выход своему креативу...
Аватара пользователя
prozh
Лит. редактор
Лит. редактор
Сообщения: 1075
Зарегистрирован: 30 янв 2011, 21:41
Контактная информация:

Re: Вопрос/ответ

Сообщение prozh » 19 июл 2011, 11:43

Ardanis писал(а):Где-то было... Еще мастер-вервольф из Shadows over Soubar точно был иммунен.
Только если делать, то имей в виду, что тогда придется еще оружие метить этими флажками, иначе убивать их будет банально нечем.

про флажки помню... с ними же в BG2 есть около десятка мечей и топор... сделал пробный вариант: добавил неснимаемые предметы с нужным иммуном в инвентарь к Greater werewolf и Greater wolfwere, сам попробовал в игре... не понравилось...... появилась новая идея, реализовать это как у троллей, чтобы только последний удар был нужным оружием, но пока не могу понять как это у троллей реализовано.... ни в скриптах, ни в 2da не нашел... кто подскажет?

Аватара пользователя
Ardanis
Сообщения: 533
Зарегистрирован: 16 июн 2010, 22:54

Re: Вопрос/ответ

Сообщение Ardanis » 19 июл 2011, 12:33

TROLL01.CRE -> TROLL01.BCS -> TROLL02.CRE

Аватара пользователя
prozh
Лит. редактор
Лит. редактор
Сообщения: 1075
Зарегистрирован: 30 янв 2011, 21:41
Контактная информация:

Re: Вопрос/ответ

Сообщение prozh » 19 июл 2011, 12:50

так просто))) через две кричи.... как же я не догадался... спасибо Ardanis!!!

Аватара пользователя
Caroline
Сообщения: 269
Зарегистрирован: 21 окт 2010, 10:17
Откуда: Ташкент, Узбекистан

Re: Вопросы по моддингу

Сообщение Caroline » 09 авг 2011, 21:49

Файл items.tph

Код: Выделить всё

MKDIR ~iwd2bg2/out~
MKDIR ~iwd2bg2/BIFF/iwd2itm~

<<<<<<<<item.itm

>>>>>>>>

COPY ~item.itm~ ~iwd2bg2/out/item.itm~
  DELETE_BYTES 0x00 ~%SOURCE_SIZE%~
  INSERT_BYTES 0x00 0x72
  WRITE_ASCII  0x00 ~ITM V1  ~ (8)
  SAY          0x08 ~~
  SAY          0x0c ~~
  WRITE_ASCII  0x10 ~None~ (8)
  WRITE_LONG   0x18 0
  WRITE_SHORT  0x1c 0
  WRITE_LONG   0x1e 0
  WRITE_SHORT  0x22 0
  WRITE_SHORT  0x24 0
  WRITE_LONG   0x26 0
  WRITE_LONG   0x2a 0
  WRITE_LONG   0x2e 0
  WRITE_SHORT  0x32 0
  WRITE_LONG   0x34 0
  WRITE_SHORT  0x38 1
  WRITE_ASCII  0x3a ~None~ (8)
  WRITE_SHORT  0x42 0
  WRITE_ASCII  0x44 ~None~ (8)
  WRITE_LONG   0x4c 0
  SAY          0x50 ~~
  SAY          0x54 ~~
  WRITE_ASCII  0x58 ~None~ (8)
  WRITE_LONG   0x60 0
  WRITE_LONG   0x64 0x72
  WRITE_SHORT  0x68 0
  WRITE_LONG   0x6a 0x72
  WRITE_SHORT  0x6e 0
  WRITE_SHORT  0x70 0


INCLUDE ~iwd2bg2/ar1000/item_macro.tpa~



COPY ~iwd2bg2/ar1000/itm/items.2da~ ~iwd2bg2/ar1000/itm~
  COUNT_2DA_ROWS 0 ~rowcount~
  FOR (i=1;i<~%rowcount%~;i=i+1) BEGIN
    LAUNCH_PATCH_MACRO ~read_2da~
      //SET ~lore_to_ident~=~%lore_to_ident%~*5
    INNER_ACTION BEGIN
      COPY ~iwd2bg2/out/item.itm~ ~iwd2bg2/BIFF/iwd2itm/%item_name%.itm~
        LAUNCH_PATCH_MACRO ~create_item~
    END
  END
   


файл item_macro.tpa

Код: Выделить всё

DEFINE_PATCH_MACRO ~read_2da~ BEGIN
  READ_2DA_ENTRY ~%i%~  0 34 ~item_name~
  READ_2DA_ENTRY ~%i%~  1 34 ~flags1~
  READ_2DA_ENTRY ~%i%~  2 34 ~flags2~
  READ_2DA_ENTRY ~%i%~  3 34 ~flags3~
  READ_2DA_ENTRY ~%i%~  4 34 ~flags4~
  READ_2DA_ENTRY ~%i%~  5 34 ~category~
  READ_2DA_ENTRY ~%i%~  6 34 ~unusable_by1~
  READ_2DA_ENTRY ~%i%~  7 34 ~unusable_by2~
  READ_2DA_ENTRY ~%i%~  8 34 ~unusable_by3~
  READ_2DA_ENTRY ~%i%~  9 34 ~unusable_by4~
  READ_2DA_ENTRY ~%i%~ 10 34 ~inv_icon~
  READ_2DA_ENTRY ~%i%~ 11 34 ~min_lvl~
  READ_2DA_ENTRY ~%i%~ 12 34 ~min_str~
  READ_2DA_ENTRY ~%i%~ 13 34 ~min_str_bon~
  READ_2DA_ENTRY ~%i%~ 14 34 ~unusebl_1_4~
  READ_2DA_ENTRY ~%i%~ 15 34 ~min_int~
  READ_2DA_ENTRY ~%i%~ 16 34 ~unusebl_2_4~
  READ_2DA_ENTRY ~%i%~ 17 34 ~min_dex~
  READ_2DA_ENTRY ~%i%~ 18 34 ~unusebl_3_4~
  READ_2DA_ENTRY ~%i%~ 19 34 ~min_wis~
  READ_2DA_ENTRY ~%i%~ 20 34 ~unusebl_4_4~
  READ_2DA_ENTRY ~%i%~ 21 34 ~min_con~
  READ_2DA_ENTRY ~%i%~ 22 34 ~weap_prof~
  READ_2DA_ENTRY ~%i%~ 23 34 ~min_cha~
  READ_2DA_ENTRY ~%i%~ 24 34 ~price~
  READ_2DA_ENTRY ~%i%~ 25 34 ~max_in_stack~
  READ_2DA_ENTRY ~%i%~ 26 34 ~icon~
  READ_2DA_ENTRY ~%i%~ 27 34 ~lore_to_ident~
  READ_2DA_ENTRY ~%i%~ 28 34 ~groundicon~
  READ_2DA_ENTRY ~%i%~ 29 34 ~weight~
  READ_2DA_ENTRY ~%i%~ 30 34 ~carriedicon~
  READ_2DA_ENTRY ~%i%~ 31 34 ~enchant~
  READ_2DA_ENTRY ~%i%~ 32 34 ~num_abil~
  READ_2DA_ENTRY ~%i%~ 33 34 ~num_eff~
  SET ~lore_to_ident~=~%lore_to_ident%~*5
END

DEFINE_PATCH_MACRO ~create_item~ BEGIN
  WRITE_BYTE   0x18 ~%flags1%~
  WRITE_BYTE   0x19 ~%flags2%~
  WRITE_BYTE   0x1a ~%flags3%~
  WRITE_BYTE   0x1b ~%flags4%~
  WRITE_SHORT  0x1c ~%category%~
  WRITE_BYTE   0x1e ~%unusable_by1%~
  WRITE_BYTE   0x1f ~%unusable_by2%~
  WRITE_BYTE   0x20 ~%unusable_by3%~
  WRITE_BYTE   0x21 ~%unusable_by4%~
  WRITE_SHORT  0x22 ~%inv_icon%~
  WRITE_SHORT  0x24 ~%min_lvl%~
  WRITE_BYTE   0x26 ~%min_str%~
  WRITE_BYTE   0x28 ~%min_str_bon%~
  WRITE_BYTE   0x29 ~%unusebl_1_4%~
  WRITE_BYTE   0x2a ~%min_int%~
  WRITE_BYTE   0x2b ~%unusebl_2_4%~
  WRITE_BYTE   0x2c ~%min_dex%~
  WRITE_BYTE   0x2d ~%unusebl_3_4%~
  WRITE_BYTE   0x2e ~%min_wis%~
  WRITE_BYTE   0x2f ~%unusebl_4_4%~
  WRITE_BYTE   0x30 ~%min_con%~
  WRITE_BYTE   0x31 ~%weap_prof%~
  WRITE_BYTE   0x32 ~%min_cha%~
  WRITE_LONG   0x34 ~%price%~
  WRITE_SHORT  0x38 ~%max_in_stack%~
  WRITE_ASCIIE 0x3a ~%icon%~ (8)
  WRITE_SHORT  0x42 ~%lore_to_ident%~
  WRITE_ASCIIE 0x44 ~%groundicon%~ (8)
  WRITE_LONG   0x4c ~%weight%~
  WRITE_ASCIIE 0x58 ~%carriedicon%~ (8)
  WRITE_LONG   0x60 ~%enchant%~
  READ_LONG    0x64 ~ability_offset~
  READ_LONG    0x6a ~effects_offset~
  PATCH_IF (~%num_abil%~>0) BEGIN
    LAUNCH_PATCH_MACRO ~item_abilities~
  END
/*  PATCH_IF (~%num_eff%~>0) BEGIN
    LAUNCH_PATCH_MACRO ~item_effects~
  END */
END

DEFINE_PATCH_MACRO ~item_abilities~ BEGIN
  INSERT_BYTES 0x72 ~%num_abil%~*0x38
  WRITE_LONG   0x6a ~%effects_offset%~+~%num_abil%~*0x38
  INNER_ACTION BEGIN
  COPY ~iwd2bg2/ar1000/itm/ability.2da~ ~iwd2bg2/ar1000/itm/ability.2da~
  SET ~num_abil0~=0
    COUNT_2DA_ROWS 0 ~rowcount1~
    FOR (n=1;n<~%rowcount1%~;n=n+1) BEGIN
      READ_2DA_ENTRY ~%n%~ 0 1 ~itm_name~
      PATCH_IF (~%itm_name%~ STRING_EQUAL_CASE ~%item_name%~) BEGIN
        READ_2DA_ENTRY ~%n%~  1 28 ~type_a~
        READ_2DA_ENTRY ~%n%~  2 28 ~iden_to_use_a~
        READ_2DA_ENTRY ~%n%~  3 28 ~ab_icpn_loc_a~
        READ_2DA_ENTRY ~%n%~  4 28 ~icon_a~
        READ_2DA_ENTRY ~%n%~  5 28 ~targ_type_a~
        READ_2DA_ENTRY ~%n%~  6 28 ~range_a~
        READ_2DA_ENTRY ~%n%~  7 28 ~lnch_req_a~
        READ_2DA_ENTRY ~%n%~  8 28 ~speed_a~
        READ_2DA_ENTRY ~%n%~  9 28 ~to_hit_a~
        READ_2DA_ENTRY ~%n%~ 10 28 ~d_size_a~
        READ_2DA_ENTRY ~%n%~ 11 28 ~1dice_a~
        READ_2DA_ENTRY ~%n%~ 12 28 ~dam_bon_a~
        READ_2DA_ENTRY ~%n%~ 13 28 ~dam_type_a~
        READ_2DA_ENTRY ~%n%~ 14 28 ~1eff_a~
        READ_2DA_ENTRY ~%n%~ 15 28 ~eff_ind_a~
        READ_2DA_ENTRY ~%n%~ 16 28 ~1charg_a~
        READ_2DA_ENTRY ~%n%~ 17 28 ~w_drain_a~
        READ_2DA_ENTRY ~%n%~ 18 28 ~a_s_b_a~
        READ_2DA_ENTRY ~%n%~ 19 28 ~itm_rech_a~
        READ_2DA_ENTRY ~%n%~ 20 28 ~att_type_a~
        READ_2DA_ENTRY ~%n%~ 21 28 ~proj_type_a~
        READ_2DA_ENTRY ~%n%~ 22 28 ~anim_over_a~
        READ_2DA_ENTRY ~%n%~ 23 28 ~anim_back_a~
        READ_2DA_ENTRY ~%n%~ 24 28 ~anim_thrust_a~
        READ_2DA_ENTRY ~%n%~ 25 28 ~is_arrow_a~
        READ_2DA_ENTRY ~%n%~ 26 28 ~is_bolt_a~
        READ_2DA_ENTRY ~%n%~ 27 28 ~is_missile_a~
        WRITE_BYTE        ~%ability_offset%~+~%num_abil0%~*0x38 ~%type_a%~
        WRITE_BYTE   0x01+~%ability_offset%~+~%num_abil0%~*0x38 ~%iden_to_use_a%~
        WRITE_SHORT  0x02+~%ability_offset%~+~%num_abil0%~*0x38 ~%ab_icpn_loc_a%~
        WRITE_ASCIIE 0x04+~%ability_offset%~+~%num_abil0%~*0x38 ~%icon_a%~ (8)
        WRITE_SHORT  0x0c+~%ability_offset%~+~%num_abil0%~*0x38 ~%targ_type_a%~
        WRITE_SHORT  0x0e+~%ability_offset%~+~%num_abil0%~*0x38 ~%range_a%~
        WRITE_SHORT  0x10+~%ability_offset%~+~%num_abil0%~*0x38 ~%lnch_req_a%~
        WRITE_SHORT  0x12+~%ability_offset%~+~%num_abil0%~*0x38 ~%speed_a%~
        WRITE_SHORT  0x14+~%ability_offset%~+~%num_abil0%~*0x38 ~%to_hit_a%~
        WRITE_SHORT  0x16+~%ability_offset%~+~%num_abil0%~*0x38 ~%d_size_a%~
        WRITE_SHORT  0x18+~%ability_offset%~+~%num_abil0%~*0x38 ~%1dice_a%~
        WRITE_SHORT  0x1a+~%ability_offset%~+~%num_abil0%~*0x38 ~%dam_bon_a%~
        WRITE_SHORT  0x1c+~%ability_offset%~+~%num_abil0%~*0x38 ~%dam_type_a%~
        WRITE_SHORT  0x1e+~%ability_offset%~+~%num_abil0%~*0x38 ~%1eff_a%~
        WRITE_SHORT  0x20+~%ability_offset%~+~%num_abil0%~*0x38 ~%eff_ind_a%~
        WRITE_SHORT  0x22+~%ability_offset%~+~%num_abil0%~*0x38 ~%1charg_a%~
        WRITE_BYTE   0x24+~%ability_offset%~+~%num_abil0%~*0x38 ~%w_drain_a%~
        WRITE_BYTE   0x26+~%ability_offset%~+~%num_abil0%~*0x38 ~%a_s_b_a%~
        WRITE_BYTE   0x27+~%ability_offset%~+~%num_abil0%~*0x38 ~%itm_rech_a%~
        WRITE_SHORT  0x28+~%ability_offset%~+~%num_abil0%~*0x38 ~%att_type_a%~
        WRITE_SHORT  0x2a+~%ability_offset%~+~%num_abil0%~*0x38 ~%proj_type_a%~
        WRITE_SHORT  0x2c+~%ability_offset%~+~%num_abil0%~*0x38 ~%anim_over_a%~
        WRITE_SHORT  0x2e+~%ability_offset%~+~%num_abil0%~*0x38 ~%anim_back_a%~
        WRITE_SHORT  0x30+~%ability_offset%~+~%num_abil0%~*0x38 ~%anim_thrust_a%~
        WRITE_SHORT  0x32+~%ability_offset%~+~%num_abil0%~*0x38 ~%is_arrow_a%~
        WRITE_SHORT  0x34+~%ability_offset%~+~%num_abil0%~*0x38 ~%is_bolt_a%~
        WRITE_SHORT  0x36+~%ability_offset%~+~%num_abil0%~*0x38 ~%is_missile_a%~
        SET ~num_abil0~=~%num_abil0%~+1
      END
      END
    END
    END
END
/*
DEFINE_PATCH_MACRO ~item_effects~ BEGIN

END
*/

Прошу прощения, я сейчас немного не трезва :vodka: Но хотелось бы узнать, что там не пашет?
Du er s? grim, at du g?r blinde b?rn bange.

Аватара пользователя
Ardanis
Сообщения: 533
Зарегистрирован: 16 июн 2010, 22:54

Re: Вопросы по моддингу

Сообщение Ardanis » 10 авг 2011, 08:01

Что за ошибка-то хоть? Или покажи что находится в 2DA, чтобы можно было вживую посмотреть на глюк.

Код: Выделить всё

COPY ~item.itm~ ~iwd2bg2/out/item.itm~
...
Файл и так весь состоит из одних нулей, насильно прописывать их нет надобности.

Аватара пользователя
Caroline
Сообщения: 269
Зарегистрирован: 21 окт 2010, 10:17
Откуда: Ташкент, Узбекистан

Re: Вопросы по моддингу

Сообщение Caroline » 10 авг 2011, 09:46

Ошибка такая.

С 2da файлами все в порядке.

Код: Выделить всё

Creating 1 directory
Creating 1 directory
Copying and patching 1 file ...
Copied [item.itm] to [iwd2bg2/out/item.itm]
Copying and patching 1 file ...
[iwd2bg2/ar1000/itm/items.2da] loaded, 8388 bytes
Copying and patching 1 file ...
[iwd2bg2/out/item.itm] loaded, 114 bytes
Copying and patching 1 file ...
[iwd2bg2/ar1000/itm/ability.2da] loaded, 3751 bytes
iwd2bg2/ar1000/itm/ability.2da copied to iwd2bg2/backup/0/ability.2da, 3751 bytes
Copied [iwd2bg2/ar1000/itm/ability.2da] to [iwd2bg2/ar1000/itm/ability.2da]
Copied [iwd2bg2/out/item.itm] to [iwd2bg2/BIFF/iwd2itm/001D6S.itm]
Copying and patching 1 file ...
[iwd2bg2/out/item.itm] loaded, 114 bytes
Copying and patching 1 file ...
[iwd2bg2/ar1000/itm/ability.2da] loaded, 3751 bytes
Copied [iwd2bg2/ar1000/itm/ability.2da] to [iwd2bg2/ar1000/itm/ability.2da]
Copied [iwd2bg2/out/item.itm] to [iwd2bg2/BIFF/iwd2itm/001D8S.itm]
Copying and patching 1 file ...
[iwd2bg2/out/item.itm] loaded, 114 bytes
Copying and patching 1 file ...
[iwd2bg2/ar1000/itm/ability.2da] loaded, 3751 bytes
ERROR: Cannot find 37 rows with at least 28 columns.ERROR: [iwd2bg2/ar1000/itm/ability.2da] -> [iwd2bg2/ar1000/itm/ability.2da] Patching Failed (COPY) (Failure("Cannot Read 2DA Entry"))
Stopping installation because of error.
ERROR: [iwd2bg2/out/item.itm] -> [iwd2bg2/BIFF/iwd2itm/00AROW01.itm] Patching Failed (COPY) (Failure("Cannot Read 2DA Entry"))
Stopping installation because of error.
ERROR: [iwd2bg2/ar1000/itm/items.2da] -> [iwd2bg2/ar1000/itm] Patching Failed (COPY) (Failure("Cannot Read 2DA Entry"))
Stopping installation because of error.
Stopping installation because of error.

Причем если в коде что-то меняет, он бывает (Cannot find 37 rows with ...) вместо 37, выдает 34, 32, 35, по разному. Всего в файле 38 строк. Во всех строках по 28 колоонок, несколько раз перепроверяла.


Код:
COPY ~item.itm~ ~iwd2bg2/out/item.itm~
...
Файл и так весь состоит из одних нулей, насильно прописывать их нет надобности.

Я то же так подумала, просто забыла убрать. Спасибо.
Du er s? grim, at du g?r blinde b?rn bange.

Аватара пользователя
Ardanis
Сообщения: 533
Зарегистрирован: 16 июн 2010, 22:54

Re: Вопросы по моддингу

Сообщение Ardanis » 10 авг 2011, 14:21

Могу предположить лишь одно - что-то не так с 2да. Другого объяснения происходящему феномену у меня нет. Потому что Вейду не находит там 37 строк с 28-ю колонками.

ЗЫ
Так, самостоятельно считать колонки в конкретной строке Вейду, похоже, не умеет.

Код: Выделить всё

COPY - ~iwd2bg2/ar1000/itm/ability.2da~ ~iwd2bg2/ar1000/itm/ability.2da~
  REPLACE_EVALUATE ~\(.+\)~ BEGIN
    INNER_PATCH_SAVE line ~%MATCH1%~ BEGIN
      COUNT_2DA_COLS cols
      PATCH_PRINT ~%cols%~
    END
  END ~~

Аватара пользователя
Aldark
Джедай-Консул
Джедай-Консул
Сообщения: 2188
Зарегистрирован: 16 май 2010, 23:43

Re: Вопросы по моддингу

Сообщение Aldark » 10 авг 2011, 22:09

А 2da файлы можно в студию?
https://arcanecoast.ru/mods : Список модов ArcaneCoast
https://github.com/arcanecoast : GitHub ArcaneCoast (переводы и инструменты)

Аватара пользователя
Caroline
Сообщения: 269
Зарегистрирован: 21 окт 2010, 10:17
Откуда: Ташкент, Узбекистан

Re: Вопросы по моддингу

Сообщение Caroline » 11 авг 2011, 15:58

Сейчас нет, с мобилы.
Только вот я кое-что поняла. Дело в том, что я вроде ошиблась там. Кажется... Там получается, что я патчу не итем, а 2да. Или я не права?
Du er s? grim, at du g?r blinde b?rn bange.

Аватара пользователя
Ardanis
Сообщения: 533
Зарегистрирован: 16 июн 2010, 22:54

Re: Вопросы по моддингу

Сообщение Ardanis » 11 авг 2011, 17:53

Ты все патчишь правильно. Сначала читается итемс.2да, далее по списку генерятся итемы, если у итема имеются абилки, то читается абилити.2да, на которой и происходит затык.

Ответить