Elite Games - Свобода среди звезд!
.
ВНИМАНИЕ!
Наша конференция посвящена космической тематике и компьютерным играм.
Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!

  » X3TC Моддинг: obj-файлы и маленькие утилитки | страница 11
Конференция предназначена для общения пилотов. Для удобства она разделена на каналы, каждый из которых посвящен определенной игре. Пожалуйста, открывайте темы только в соответствующих каналах и после того, как убедитесь, что данный вопрос не обсуждался ранее.

Поиск | Правила конференции | Фотоальбом | Регистрация | Список пилотов | Профиль | Войти и проверить личные сообщения | Вход

   Страница 11 из 12
На страницу: Пред.  1, 2, 3 ... , 10, 11, 12  След.    Перейти:   Все страницы
Поиск в этой теме:
Канал X3: Terran Conflict » Модовый и скриптовый отсек X3: Terran Conflict: «X3TC Моддинг: obj-файлы и маленькие утилитки»
Whiskas
 137 EGP


Рейтинг канала: 3(36)
Репутация: 5
Сообщения: 139

Зарегистрирован: 28.04.2011


Внимательней(!): версия 3.2
 Cкрытый текст   (кликните здесь для просмотра)
Код:
.title disconnect_gate
.radix 10d
.settime "13-01-2012 14:20:22"
.loadobj "x3story.obj"

.section code, con

.classdef Obj_2312
.func MenuActionNew       ;Override offset to Obj_2312.MenuAction in the table
.func OnContextMenuReturn ;Callback
.endclass Obj_2312

; Obj_2312.MenuActionNew()
Obj_2312.MenuActionNew:
           enter      0, 14
           read       MENU.var_2200_20 ; [20d ; 14h]
           push       0
           if SP[0]>=SP[1] then push 0 else push 1
           if SP[0]=0 then jump L00148D63
           read       MENU.var_2200_20 ; [20d ; 14h]
           push       1
           sub        SP[0],SP[1]
           push       1
           read       MENU.var_2200_33 ; [33d ; 21h]
           call85     DOCK.GetGateLink
           push       SP[0]
           if SP[0]<>0 then jump Context
           push       0
           call88     Obj_2312.CanRealign
           if SP[0]=0 then jump L00148D2D
           push       SP[0] ; loc1
           if SP[0]=0 then push 1 else push 0
           if SP[0]<>0 then jump L00148D21
           push       SP[0] ; loc1
           push       1
           callasm    SE_ArraySize
           push       3
           if SP[0]>=SP[1] then push 0 else push 1
           if SP[0]=0 then jump L00148D15
           push       3
           push       SP[1] ; loc1
           get_from_array
           pushb      -1d ; 0FFh
           if SP[0]<>SP[1] then push 0 else push 1
           if SP[0]=0 then jump L00148D15
           push       1
           jump       L00148D16

L00148D15: push       0
L00148D16: if SP[0]<>0 then jump L00148D21
           push       0
           jump       L00148D22

L00148D21: push       1
L00148D22: if SP[0]=0 then jump L00148D2D
           push       1
           jump       L00148D2E

L00148D2D: push       0
L00148D2E: if SP[0]=0 then jump L00148D58
           push       0
           push       0
           push       0
           read       MENU.var_2200_33 ; [33d ; 21h]
           call85     GetSector ; 000003E7
           pushb      7
           get_object
           pushb      5
           pushw      2228d ; 08B4h
           create_object
           call85     MENU_GALAXY.CreateNext
           push       1
           call88     MENU.OpenNextMenu
           pop
           jump       L00148D62

L00148D58: push       0
           pushw      200d ; 0C8h
           call86     X_AUDIO.PlayFailSample
           pop
L00148D62: pop
L00148D63: push       0
           ret      
Context:   push       0
           call88     Obj_2312.CanRealign
           if SP[0]=0 then jump L00148D2D
           pop
           pushw      152d ;???
           get_object
           push         2    ;???
           call88     MENU.PrepareDropdownMenu
           pop
           push       0           
           push       1104050d    ;XML string
           pushb      35d         ;XML node id?
           push       2           
           callasm    SE_ReadText ;Button caption
           push       150d        ;Button width? Seems no
           pushw      600d        ;Button ID? Seems yes
           pushb      4           
           pushw      641d        ;this is everywhere
           call86     Obj_641.AddButton
           pop
           push       0           
           push       1103002d    ;XML string
           pushb      35d         ;XML node id?
           push       2           
           callasm    SE_ReadText ;Button caption
           push       150d        ;Button width? Seems no
           pushw      601d        ;Button ID? Seems yes
           pushb      4           
           pushw      641d        ;this is everywhere
           call86     Obj_641.AddButton
           pop
           push       0
           pushw      641d ; 0281h
           call86     Obj_641.Show
           pop
           push       0
           ret

Obj_2312.OnContextMenuReturn:
           enter      2, 14
           push       SP[4] ;arg2 ;Button ID?
           jump       Table

         ;inherited call to Obj_2312.MenuAction, reconstructing original behaviour
Realign:   push       0
           call88     Obj_2312.MenuAction
           pop
           jump        Leave

           ;Obj_2312.CreatePrevious stolen code, but adapted to disconnect
Disconnect:read       MENU.var_2200_20 ; [20d ; 14h]
           push       0
           if SP[0]>=SP[1] then push 0 else push 1
           if SP[0]=0 then jump Leave
           push       0
           push       SP[4] ; arg1 ????????????????
           read       MENU.var_2200_20 ; [20d ; 14h]
           push       1
           sub        SP[0],SP[1]
           push       3
           read       MENU.var_2200_33 ; [33d ; 21h]
           call85     DOCK.DisconnectGate
           pop
           jump        Leave
Leave:     push       0
           ret
Table:     switch     2, 0
           .long      Leave
           .long      600d, Realign
           .long      601d, Disconnect
.end

После компиляции необходимо в таблице объекта 2312 заменить адрес к старой Obj_2312.MenuAction на новый адресс к Obj_2312.MenuActionNew. В сгенерируемом листинге оффсет можно достать, а старый адрес можно найти winhex-е: самый последний найденный, это как раз таблица.

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

Помимо проблем форматирования в visual studio, возможно ассемблеру не хватает скопа для функций, чтобы каждая могла переиспользовать названия меток, а то пока каждый раз новые нужно придумывать. Потом возможно не хватает override, пока выводит что такой метод уже задекларирован или как-то так, а вот в этом патче он реально нужен потому что MenuAction/OnContextMenuReturn и т.п. это колбэки по имени, их необходимо перехватывать. И наконец settime, а почему она не по всему обжу ставит дату? Там же повсюду места, где эти штампы ставятся, но если ни на что не влияет то и не страшно.

Насчет патча: врата остаются с пленкой, но пролетаешь всквозь, прыгать к ним можно. NPC остаются в ловушке если все отключить, у себя неизвестный объект поймал))) Как тренировка вышло, ошибки наверное есть, больно всё сложно и капризно, чуть что - краш. В целом интересно покодить, но играть не знаю, может однажды после пачта экзешника и обжа на 5 байт, чтоб не марать игру.

Таки нашел ошибки, pushb вместо push и push SP[3] вместо SP[4] arg1 с кучей вопросительных знаков, и всё равно отключает врата хоть arg0, которого нет, хоть arg1 т.е. ему вообще все равно на этот аргумент как будто...

______

Баг-фикс возможно, в меню собственности на вкладке "Корабли" невозможно торговать со станцией по нажатию d. В Obj_2251.Input есть такой фрагмент:
 Cкрытый текст   (кликните здесь для просмотра)
Код:
L0012BCD5: push       SP[3] ; arg1
           push       SP[5] ; arg2
           if SP[0]<>SP[1] then push 0 else push 1
           if SP[0]=0 then jump L0012BCE3
           push       2
           ret

L0012BCE3: read       MENU.var_2200_24 ; [24d ; 18h]
           push       0
           if SP[0]<>SP[1] then push 0 else push 1
           if SP[0]<>0 then jump L0012BCFD
           read       MENU.var_2200_24 ; [24d ; 18h]
           push       1
           if SP[0]<>SP[1] then push 0 else push 1
           if SP[0]<>0 then jump L0012BCFD
           push       0                                 ;no direct trade on ships tab because of 0, set 1 to bypass
           jump       L0012BCFE
push 0 на push 1 и начинает работать для пристыкованных.

Последний раз редактировалось: Whiskas (10:20 17-08-2018), всего редактировалось 3 раз(а)
    Добавлено: 07:55 17-08-2018   
DNA78
 419 EGP


Рейтинг канала: 9(1060)
Репутация: 70
Сообщения: 1165
Откуда: Кыргызстан
Зарегистрирован: 12.11.2008
Whiskas T-Mech :
И наконец settime, а почему она не по всему обжу ставит дату? Там же повсюду места, где эти штампы ставятся, но если ни на что не влияет то и не страшно.

С помощью этой директивы нужно выставлять оригинальное время компиляции обжа. Делается это для правильного отображения версии игры при загрузки сохранений.
Whiskas T-Mech :
Баг-фикс возможно, в меню собственности на вкладке "Корабли" невозможно торговать со станцией по нажатию d.
push 0 на push 1 и начинает работать для пристыкованных.

Может это специально сделано, т.к. в меню собственности у меня срабатывают кастомные горячие клавиши. Скорее всего проблема лежит глубже.
Whiskas T-Mech :
3.4 так затупила и лагать начала когда 10 мистралей купил, что пришлось откатиться до старых сохранок 3.2. Так и играю на ней, сомневаюсь теперь в последнем патче.

Не замечал у себя в игре такого.
Whiskas T-Mech :
Как тренировка вышло, ошибки наверное есть, больно всё сложно и капризно, чуть что - краш.

А не проще вывести скриптовую команду для функции DOCK.DisconnectGate?
_________________
Очевидное-невероятное
    Добавлено: 19:16 17-08-2018   
Whiskas
 137 EGP


Рейтинг канала: 3(36)
Репутация: 5
Сообщения: 139

Зарегистрирован: 28.04.2011
DNA78 :
Whiskas T-Mech :
Баг-фикс возможно, в меню собственности на вкладке "Корабли" невозможно торговать со станцией по нажатию d.
push 0 на push 1 и начинает работать для пристыкованных.
Может это специально сделано, т.к. в меню собственности у меня срабатывают кастомные горячие клавиши. Скорее всего проблема лежит глубже.
Ну в целом только на вкладке Все и Станции можно нажать клавишу торговать и сразу открывается меню MENU_TRADE, а вот на Корабли нужно почему-то enter нажать т.е. вызвать субменюшку.
DNA78 :
Whiskas T-Mech :
Как тренировка вышло, ошибки наверное есть, больно всё сложно и капризно, чуть что - краш.
А не проще вывести скриптовую команду для функции DOCK.DisconnectGate?
А я не знаю, скрипты вообще ни разу не делал и не представляю что там.
_____



Ячейка хаакских КЛ. Это в MENU_WEAPONS.GetLaserArray:
Код:
0010CAA3: 05 FF                |    2            pushb      -1d ; 0FFh ;change to 29d ; 01Dh to activate
0010CAA5: 07 FF7001DF          |    3            pushd      -9436705d ; 0FF7001DFh
0010CAAA: 05 1F                |    4            pushb      31d ; 1Fh

-1d ; 0FFh заменить на 29d ; 01Dh
1 - индекс в массиве и соотвественно позиция станет для квадрата т.е. самый последний в случае 30d
2 - цвет
3 - тип возвращаемый SA_GetShipTypeTurretLaserMask. Обратно распилить хаакскую ячейку на 3 как в Reunion (КЛ-1, КЛ-2, КЛ-3) выглядит нетривиальным, ведь для всех трех кионок 1F походу теперь. Вот ведь лень какая видимо была, в reunion они вообще цветами разными были!

На весь x3story есть 2 вызова:
call88 MENU_WEAPONS.DrawMaskColors (в MENU_WEAPONS.SpecialUpdate)
call86 MENU_WEAPONS.DrawMaskColors (в MENU_SHIPINFO.SpecialUpdate)

Прямо перед вызовами идет pushw 168d ; 0A8h - это позиция всей линии. Можно влево переместить на 5-10 пикселей если новых квадратов привезут)))

Вообще всплывает отсутствие возможности в ассемблере "просто кода", "тела" и директив на прямой патчинг по адресу, чтобы я мог бы приказать компилятору сделай jump mypurecode вон там (в какой-то оригинальной функции) и вот так можно было бы расширять оригинал. Пока же ассемблер почему-то спотыкается об get_strg S00000877 ; "" -подобные и при всем желании даже скопировать всю функцию невозможно, чтобы редирект сделать после компиляции вручную.

Последний раз редактировалось: Whiskas (01:22 18-08-2018), всего редактировалось 1 раз
    Добавлено: 01:20 18-08-2018   
DNA78
 419 EGP


Рейтинг канала: 9(1060)
Репутация: 70
Сообщения: 1165
Откуда: Кыргызстан
Зарегистрирован: 12.11.2008
Whiskas T-Mech :
Пока же ассемблер почему-то спотыкается об get_strg S00000877 ; "" -подобные и при всем желании даже скопировать всю функцию невозможно, чтобы редирект сделать после компиляции вручную.

Если в своём патче вы затрагиваете уже существующие стринги или создаёте новые, то их (стринги) нужно по любому объявлять в своём патче. И ассемблер больше не будет об них спотыкаться Подмигиваю
Код:
         .section   strg, con
S000011F7:  .ascii     "???"
S0000144C:  .ascii     " "

_________________
Очевидное-невероятное
    Добавлено: 04:24 18-08-2018   
Whiskas
 137 EGP


Рейтинг канала: 3(36)
Репутация: 5
Сообщения: 139

Зарегистрирован: 28.04.2011
720x217
 Cкрытый текст   (кликните здесь для просмотра)

Патч
 Cкрытый текст   (кликните здесь для просмотра)
Код:
.title kyon
.radix 10d
.loadobj "x3story.obj"

;v3.2
;.settime "13-01-2012 14:20:22"
;.patchcode
;10A662: nop
;        nop
;        nop
;        call87     KyonDrawMaskColors
;aka 0608BC860010DC2B -> 0C0C0C87XXXXXXXX

;v3.4
;.settime "14-11-2017 11:03:41"
;.patchcode
;10CA8D: nop
;        nop
;        nop
;        call87     KyonDrawMaskColors
;aka 0608BC8600110056 -> 0C0C0C87XXXXXXXX

.section strg, con

.ascii "KyonDrawMaskColors"

.section code, con

.classdef MENU_SHIPINFO
.func KyonSupport
.func KyonDrawMaskColors
.endclass MENU_SHIPINFO

MENU_SHIPINFO.KyonSupport:
           ;arg1 - NameID
           enter      1, 10
           pushd      -1
           push       8
           push       1
           callasm    SA_GetNumSubTypes
           push       SP[0]
.Loop:     push       1
           push       SP[3]
           add        SP[0],SP[1]
           mov        SP[3],SP[0]
           pop
           push       SP[1]
           push       SP[3]
           if SP[0]>=SP[1] then push 0 else push 1
           if SP[0]=0 then jump .Exit
           ;read       MENU_SHIPINFO.var_2229_3 ; [84d ; 54h]
           ;if SP[0]=0 then jump .Ware
           read       MENU_SHIPINFO.var_2229_7 ; [88d ; 58h]  ; Encyclopedia View Flag(?)
           if SP[0]=0 then jump .Ware
           push       SP[2]
           pushb      8
           push       2
           callasm    SA_GetTypeTK
           read       MENU_SHIPINFO.var_2229_1 ; [82d ; 52h]
           push       1
           callasm    SA_GetShipTypeMaxTKClass
           if SP[0]>=SP[1] then push 0 else push 1
           if SP[0]=0 then jump .Type
           jump       .Loop

.Ware:      push       SP[2]
           push       8
           push       2
           read       MENU.var_2200_33 ; [33d ; 21h]
           call85     SHIP.CanTransportWareType
           if SP[0]=0 then push 1 else push 0
           if SP[0]=0 then jump .Type
           jump       .Loop

.Type:     push       SP[6] ; arg1
           push       SP[3] ; loc1
           push       8
           push       2
           call84     global.GetWareNameID
           if SP[0]=SP[1] then push 0 else push 1
           if SP[0]<>0 then jump .Loop
           popx        3
           push        1
           ret             

.Exit:     popx        3
           push        0
           ret

MENU_SHIPINFO.KyonDrawMaskColors:
           ;arg1 - Array of array[3]
           ;arg2 - Supported Weapons (GetTurretLaserMask)
           ;arg3 - Installed Weapons (1 << GetSubGType)
           ;arg4 - Left
           ;arg5 - Top
           enter      5, 20
           pushb      20d ; 14h
           write      MENU.var_2200_70 ; [70d ; 46h]
           pop
           pushd       -7 ; shift left
           push       SP[7]
           add        SP[0],SP[1]
           mov        SP[7],SP[0]
           pop
           pushd      32
.Continue: push       -1
           push       SP[1]
           add        SP[0],SP[1]
           mov        SP[1],SP[0]
           xjump      32, 0
           .long      .Break
           .long      .00
           .long      .01
           .long      .02
           .long      .03
           .long      .04
           .long      .05
           .long      .06
           .long      .07
           .long      .08
           .long      .09
           .long      .10
           .long      .11
           .long      .12
           .long      .13
           .long      .14
           .long      .15
           .long      .16
           .long      .17
           .long      .18
           .long      .19
           .long      .20
           .long      .21
           .long      .22
           .long      .23
           .long      .24
           .long      .25
           .long      .26
           .long      .27
           .long      .28
           .long      .29
           .long      .30
           .long      .31

           ;The -1d hidden items are only used in column rendering for the sake of colors.
           ;In line rendering those would just make gaps between squares (unless all located in the end of an array)
           
           ;pushb      -1d ; 0FFh
           ;pushd      -986896d ; 0FFF0F0F0h
           ;pushb      30d ; 1Eh
           ;jump       .Draw
           ;pushb      -1d ; 0FFh
           ;pushd      -986896d ; 0FFF0F0F0h
           ;pushb      29d ; 1Dh
           ;jump       .Draw   

.31:       pushb      31
           pushd      0FFAC78FDh ; RGB = 172 120 253 (Reunion 0FFFF01FFh RGB = 255 1 255)
           pushb      31d ; 1Fh
           jump       .Weapon         
.30:       pushb      30
           pushd      0FF983CEEh ; RGB = 152 60 238  (Reunion 0FFD001D0h RGB = 208 1 208)
           pushb      31d ; 1Fh
           jump       .Weapon
.29:       pushb      29
           pushd      0FF7001DFh ; RGB = 112 1 223 (Reunion 0FFA001A0h RGB = 160 1 160)
           pushb      31d ; 1Fh
           jump       .Weapon
.28:       pushb      28d ; 1Ch
           pushd      -7667970d ; 0FF8AFEFEh
           pushb      27d ; 1Bh
           jump       .Weapon
.27:       pushb      27d ; 1Bh
           pushd      -16656939d ; 0FF01D5D5h
           pushb      24d ; 18h
           jump       .Weapon
.26:       pushb      26d ; 1Ah
           pushd      -16670046d ; 0FF01A2A2h
           pushb      19d ; 13h
           jump       .Weapon
.25:       pushb      25d ; 19h
           pushd      -16682896d ; 0FF017070h
           pushb      14d ; 0Eh
           jump       .Weapon
.24:       pushb      24d ; 18h
           pushd      -16691120d ; 0FF015050h
           pushb      10d ; 0Ah
           jump       .Weapon
.23:       pushb      23d ; 17h
           pushd      -2752255d ; 0FFD60101h
           pushb      23d ; 17h
           jump       .Weapon
.22:       pushb      22d ; 16h
           pushd      -7798527d ; 0FF890101h
           pushb      9
           jump       .Weapon
.21:       pushb      21d ; 15h
           pushd      -91581d ; 0FFFE9A43h
           pushb      17d ; 11h
           jump       .Weapon
.20:       pushb      20d ; 14h
           pushd      -757247d ; 0FFF47201h
           pushb      13d ; 0Dh
           jump       .Weapon
.19:       pushb      19d ; 13h
           pushd      -5812479d ; 0FFA74F01h
           pushb      8
           jump       .Weapon
.18:       pushb      18d ; 12h
           pushd      -8854664d ; 0FF78E378h
           pushb      22d ; 16h
           jump       .Weapon
.17:       pushb      17d ; 11h
           pushd      -14305755d ; 0FF25B625h
           pushb      15d ; 0Fh
           jump       .Weapon
.16:       pushb      16d ; 10h
           pushd      -15173864d ; 0FF187718h
           pushb      4
           jump       .Weapon
.15:       pushb      15d ; 0Fh
           pushd      -3698944d ; 0FFC78F00h
           pushb      26d ; 1Ah
           jump       .Weapon
.14:       pushb      14d ; 0Eh
           pushd      -7050752d ; 0FF946A00h
           pushb      18d ; 12h
           jump       .Weapon
.13:       pushb      13d ; 0Dh
           pushd      -10402560d ; 0FF614500h
           pushb      5
           jump       .Weapon
.12:       pushb      12d ; 0Ch
           pushd      -10637826d ; 0FF5DADFEh
           pushb      21d ; 15h
           jump       .Weapon
.11:       pushb      11d ; 0Bh
           pushd      -16683302d ; 0FF016EDAh
           pushb      12d ; 0Ch
           jump       .Weapon
.10:       pushb      10d ; 0Ah
           pushd      -16693362d ; 0FF01478Eh
           pushb      7
           jump       .Weapon
.09:       pushb      9
           pushd      -460650d ; 0FFF8F896h
           pushb      25d ; 19h
           jump       .Weapon
.08:       pushb      8
           pushd      -3224051d ; 0FFCECE0Dh
           pushb      16d ; 10h
           jump       .Weapon
.07:       pushb      7
           pushd      -6382070d ; 0FF9E9E0Ah
           push       3
           jump       .Weapon
.06:       pushb      6
           pushd      -3092272d ; 0FFD0D0D0h
           pushb      28d ; 1Ch
           jump       .Weapon
.05:       pushb      5
           pushd      -5197648d ; 0FFB0B0B0h
           push       2
           jump       .Weapon
.04:       pushb      4
           pushd      -7303024d ; 0FF909090h
           pushb      20d ; 14h
           jump       .Weapon
.03:       push       3
           pushd      -9408400d ; 0FF707070h
           pushb      11d ; 0Bh
           jump       .Weapon
.02:       push       2
           pushd      -11513776d ; 0FF505050h
           pushb      6
           jump       .Weapon
.01:       push       1
           pushd      -13619152d ; 0FF303030h
           push       1
           jump       .Weapon
.00:       push       0                         
           pushd      -15198184d ; 0FF181818h   
           push       0                         
           jump       .Weapon
           
.Weapon:   push       0
           push       SP[3] ; loc4
           if SP[0]<SP[1] then push 0 else push 1
           if SP[0]=0 then jump .Done
           push       524288d ; 00080000h
           push       SP[1] ; loc2
           or         SP[0],SP[1]
           readvar    global.ga_ShipSpeaker ; [42d ; 2Ah]
           get_from_array
           push       0
           if SP[0]=SP[1] then push 0 else push 1
           if SP[0]<>0 then jump .Done
           push       SP[2] ; loc2 (indexed position as ident)
           switch     3, 0
           .long      .Default
           .long      29, .KB1
           .long      30, .KB2
           .long      31, .KB3

.KB1:      push       4643d
           jump       .Test
.KB2:      push       4653d
           jump       .Test
.KB3:      push       4663d
           jump       .Test
.Test:     push       1
           call88     MENU_SHIPINFO.KyonSupport
           if SP[0]<>0 then jump .Default
           push        SP[10] ; arg4
           push       SP[3] ; loc2
           push       7 ; width multiplier
           mul        SP[0],SP[1]
           add        SP[0],SP[1] ; loc5
           push       0
           push       SP[0]
           jump       .Unsupported

;Custom Forced Draw
;.Draw:     push        SP[10] ; arg4
;           push       SP[3] ; loc2
;         push       7 ; width multiplier
;           mul        SP[0],SP[1]
;           add        SP[0],SP[1] ; loc5
;         push       0
;         push       SP[0]
;         jump       .Paint

.Default:  push        SP[10] ; arg4
           push       SP[3] ; loc2
           push       7 ; width multiplier
           mul        SP[0],SP[1]
           add        SP[0],SP[1] ; loc5 
           push       1
           push       SP[2] ; loc2
           shl        SP[1],SP[0]
           push       SP[0] ; loc6
           push       SP[1] ; loc6
           push       SP[12] ; arg2
           and        SP[0],SP[1] ; ((1 << array[0? or 2?]) and SA_GetShipTypeTurretLaserMask(8)) = 0 then goto .Unsupported
           if SP[0]=0 then jump .Unsupported
           ;Makes sense only in MENU_WEAPONS as MENU_SHIPINFO always passes 0
           push       SP[1] ; loc6
           push       SP[13] ; arg3
           and        SP[0],SP[1]
           if SP[0]=0 then jump .Uninstalled
           pushd      -2960686d ; 0FFD2D2D2h
           jump       .Paint

.Uninstalled:
           pushd      -9276814d ; 0FF727272h
.Paint:    pushb      11d ; 0Bh
           pushb      5
           push       SP[17] ; arg5
           push       1
           add        SP[0],SP[1]
           push       SP[6] ; loc5
           pushb      5
           call88     MENU.DrawRawRect
           pop
           push       SP[4] ; loc3
           pushb      9
           push       3
           push       SP[17] ; arg5
           push       2
           add        SP[0],SP[1]
           push       SP[6] ; loc5
           push       1
           add        SP[0],SP[1]
           pushb      5
           call88     MENU.DrawRawRect
           popx       7
           jump       .Continue
.Unsupported:       
           pushd      -9276814d ; 0FF727272h
           pushb      9
           push       3
           push       SP[17] ; arg5
           push       2
           add        SP[0],SP[1]
           push       SP[6] ; loc5
           push       1
           add        SP[0],SP[1]
           pushb      5
           call88     MENU.DrawRawRect
           popx       7
           jump       .Continue

.Done:     popx       3
           jump       .Continue
.Break:    ret

.end

Чисто в "Совместимые лазеры", остается 2 места: колонка с названиями, которая идет следом и меню вооружения (там усложненней ситуация). Кионки определяю по Name ID, кстати есть типа "width multiplier" (шаг) - линия ужимается и ещё 20-30 ячеек можно создать без проблем. Впрочем, не в курсе можно ли добавлять новое оружие вообще, там же тупо захардкодили int32 и все его биты. Я пока всё.

В .patchcode вместо XXXXXXXX нужно вписать адрес строки KyonDrawMaskColors (т.е. пропатчить x3story вручную). После асма, затем дизасма, в файле .str она появится. В связке strg и call87 почти идеальны: больше не нужно следить за оффсетами если много методов добавлять/перемешивать. Но авто-постпатчинг это не заменит.

Заметил особенность shl: нужно делать shl SP[1],SP[0], но результат идет в SP[0]. Обычно же %instruction% SP[0],SP[1]

Ред.
Посмотрел X-Tended, новые пушки наследуются от существующих битов прям как хаакские от одного того же. Обж такое обыгрывает, устраивая "битву" между размером корабля и размером пушки (S, M, XL которые). Если корабль побеждает, то пушка поддерживается и нужно слот закрашивать Улыбка

Перехватчик S = КЛ1(S)
Истребитель M = КЛ1(S) + КЛ2(M)
Авианосец XL = КЛ1(S) + КЛ2(M) + КЛ3(XL)

Невозможно сделать корабль M, который бы поддерживал только КЛ-2... КЛ-1 будет автоматически поддерживаться т.к. от одного того же бита и размер S < M (???). Пусть так, попробую таки завершить патч полностью на кионках, и спец-таблицу в отдельный xml для удобства. Ради новых пушек, но с нюансом распила хаакских... хотя позиции ячеек кастомизироваными планируются быть (виртуальность) и мухлеж-закономерность как выше с хаакскими кораблями можно будет слегка попытаться "размыть", разбросать эти слоты короче.

Последний раз редактировалось: Whiskas (18:04 23-08-2018), всего редактировалось 3 раз(а)
    Добавлено: 18:54 22-08-2018   
DNA78
 419 EGP


Рейтинг канала: 9(1060)
Репутация: 70
Сообщения: 1165
Откуда: Кыргызстан
Зарегистрирован: 12.11.2008
Whiskas T-Mech :
Посмотрел X-Tended, новые пушки наследуются от существующих битов прям как хаакские от одного того же.

От каких битов Совсем запутался... , вы о чём сейчас вообще. Складывается ощущение, что вы там в хексе кодите.
..биты, авто-постпатчинг, оффсеты - ужас какой Совсем запутался...
Может обж новый сделаем или экзешник разберём Подмигиваю
_________________
Очевидное-невероятное
    Добавлено: 18:42 23-08-2018   
Whiskas
 137 EGP


Рейтинг канала: 3(36)
Репутация: 5
Сообщения: 139

Зарегистрирован: 28.04.2011
SG_LASER! Или как его в X Editor, ну да, там имена. SubType
0x80000000 - Кионки
0x40000000 - Ремонтные(или кажется резервные) лазеры
и т.д.

SA_GetShipTypeTurretLaserMask возвращает именно это.

DNA78 :
Складывается ощущение, что вы там в хексе кодите.
..биты, авто-постпатчинг, оффсеты - ужас какой Совсем запутался...
Может обж новый сделаем или экзешник разберём Подмигиваю

В winhex-е, ассемблер же не патчит где и что нужно мне. Если всё реализовать на что я сетовал можно станет просто релизить asm-ы в любом порядке, применять что хочется как моды будут. Любой набор новых фич по желанию самого игрока. Мне делать обертку над xa_asm чтобы зарелизить - смысла 0, я ничего не поддерживаю и исключительно на x64 пишу прикладной софт с кучей новых наборов инструкций, не у всех запустилось бы даже. Т.е. могу чисто для себя по-простому, тогда апать тему смысла уже не станет.

По exe немного подумал о динамическом патче загружаемого x3story, перехватить чтение и эти же бы asm-ы прям на лету применять из какой-нибудь папки \obj_patches.

Последний раз редактировалось: Whiskas (00:15 24-08-2018), всего редактировалось 3 раз(а)
    Добавлено: 19:02 23-08-2018   
kvadrat
 222 EGP


Рейтинг канала: 5(119)
Репутация: 57
Сообщения: 730
Откуда: Не помню
Зарегистрирован: 17.12.2008
DNA78 :
..биты, авто-постпатчинг, оффсеты - ужас какой
Может обж новый сделаем или экзешник разберём

ЕХЕ просто патчить в Оле дебагере напрямую.А вот недоделаную длл(обж) без исходника ехе похуже
_________________
Языковой барьер, конечно, существует - но водка спасает...
    Добавлено: 23:41 23-08-2018   
Whiskas
 137 EGP


Рейтинг канала: 3(36)
Репутация: 5
Сообщения: 139

Зарегистрирован: 28.04.2011
Чет я загнул про 30 новых... около 45 получилось пока (+15 где-то). Всё сделал:
 Cкрытый текст   (кликните здесь для просмотра)
Возврат альдринских:




Возврат хаакских:





Искатель:

Специальный файл types\TLaserArray.txt
Код:
3|5|7|0|0
0;28;28;28;SS_LASER_IRE
0;48;48;48;SS_LASER_PAC
0;80;80;80;SS_LASER_HEPT
0;112;112;112;SS_LASER_CIG
0;144;144;144;SS_LASER_PPC
0;176;176;176;SS_LASER_MASS
0;208;208;208;SS_LASER_MINING;SS_LASER_TUG;SS_LASER_REPAIR
0;158;158;10;SS_LASER_PRG
0;206;206;13;SS_LASER_FLAK_CLUSTER
0;248;248;150;SS_LASER_PBC
0;1;71;142;SS_LASER_IOND
0;1;110;218;SS_LASER_IPG
0;93;173;254;SS_LASER_IONC
0;97;69;0;SS_LASER_FBL
0;148;106;0;SS_LASER_PSG
0;199;143;0;SS_LASER_TRIBEAM
0;24;119;24;SS_LASER_EBC
0;37;182;37;SS_LASER_FLAK_ALPHA
0;129;227;120;SS_LASER_GAUSS
0;167;79;1;SS_LASER_PBE
0;244;114;1;SS_LASER_ESR
0;254;154;67;SS_LASER_PAL
0;137;1;1;SS_LASER_PD
0;214;1;1;SS_LASER_IBL

#Terran Lasers
0;1;80;80;SS_LASER_EMP
0;1;112;112;SS_LASER_MAM
0;1;162;162;SS_LASER_TERRANANTIFIGHTER
0;1;213;213;SS_LASER_PSP
0;138;254;254;SS_LASER_FUSIONBEAM

#Aldrin Lasers
-1;240;240;240;SS_LASER_EMP_1;SS_LASER_MAM_1;SS_LASER_TERRANANTIFIGHTER_1

#Reserve Lasers
-1;240;240;240;SS_LASER_DUMMY1;SS_LASER_DUMMY2

#Khaak Lasers
-1;112;1;223;SS_LASER_KH_ALPHA;SS_LASER_KH_BETA;SS_LASER_KH_GAMMA
Это ванильный вариант, 1 в 1 по поведению.

Ровно на первой строке должны быть 5 цифр через |
Код:
1 - Ширина слота
2 - Ширина обводки слота, когда установлен лазер
3 - Расстояние между слотами
4 - Смещение всех слотов по горизонтали в меню информации
5 - Смещение всех слотов по горизонтали в меню вооружения
Далее идут слоты, если кол-во значений через ; не меньше четырех то добавится.
Код:
1 - 0 = не скрывать слот, любое другое = скрыть (пробелов между не будет)
2 - R
3 - G
4 - B
5 и далее - ID лазеров.
Порядок имеет значения, даже если слот скрыт есть ещё колонка поддерживаемых лазеров, порядок показа сохраняется и цвет вытаскивается. Если какие-то лазеры не "зарегистрированы" в этом файле - они тупо не покажутся в списках. Всё оружие нужно разбрасывать. Ну, а ячейка загорится цветом тогда, когда действительно возможно установить лазер(ы) из под того слота.

Вариант в скринах был такой (первая строка 2|4|5|0|0), затем в конце:
Код:
....
#Aldrin Lasers
0;80;80;255;SS_LASER_EMP_1
0;130;130;255;SS_LASER_MAM_1
0;180;180;255;SS_LASER_TERRANANTIFIGHTER_1

#Reserve Lasers
-1;240;240;240;SS_LASER_DUMMY1;SS_LASER_DUMMY2

#Khaak Lasers
0;112;1;223;SS_LASER_KH_ALPHA
0;152;60;238;SS_LASER_KH_BETA
0;172;120;253;SS_LASER_KH_GAMMA

#Dummy slots
0;0;0;0
0;0;0;0
0;0;0;0
0;0;0;0
0;0;0;0
0;0;0;0
0;0;0;0

Вариант хака ранее для хаакских с единственной ячейкой:
Код:
0;112;1;223;SS_LASER_KH_ALPHA;SS_LASER_KH_BETA;SS_LASER_KH_GAMMA
Редактировать и пересохранять не выходя из игры - Alt-Tab просто переоткрыть меню. В аттаче для 3.2 готовый файл чисто на посмотреть + asm.
Хотя я сделал для 3.4 (в асме видно), но игра отказалась загружать сохранения с таким обжом. Чистые сохранения от 3.2 не загрузил, а новую игру пожалуйста и работает вроде т.е. патч корректен был... А вообще по коду - вроде нормально, везде корректно отображается (информация, вооружение, энциклопедия, чертежи).

laser_array.7z
 Описание:
X3TC 3.2 + X3AP 3.3
 Имя файла:  laser_array.7z
 Размер файла:  1.39 MB
 Скачано:  488 раз(а)


Последний раз редактировалось: Whiskas (11:19 03-09-2018), всего редактировалось 2 раз(а)
    Добавлено: 18:36 26-08-2018   
DNA78
 419 EGP


Рейтинг канала: 9(1060)
Репутация: 70
Сообщения: 1165
Откуда: Кыргызстан
Зарегистрирован: 12.11.2008
Whiskas T-Mech :
В аттаче для 3.2 готовый файл чисто на посмотреть + asm.

Ну вроде на версии 3.4 работает Улыбка Спасибо!

Вот только информация по .patchcode для 3.2 и 3.4 данная в laser_array.asm не полная. Если бы не готовый обж для 3.2, то ничего не получилось. Конкретный завис. Оказывается в функции ; function MENU_SHIPINFO.SpecialUpdate(); вырезан конкретный кусок кода, и изменены метки. А в .patchcode где об этом информация ? Подозрение.
_________________
Очевидное-невероятное
    Добавлено: 22:11 27-08-2018   
Whiskas
 137 EGP


Рейтинг канала: 3(36)
Репутация: 5
Сообщения: 139

Зарегистрирован: 28.04.2011
DNA78 :
Оказывается в функции ; function MENU_SHIPINFO.SpecialUpdate(); вырезан конкретный кусок кода, и изменены метки. А в .patchcode где об этом информация ? Подозрение.

Прям вот вырезать нет такого, но некоторый код действительно становится неиспользуемым. Это наверное про LaserDrawMaskColumn, вместо оригинального рисования колонки:
Цитата:
push SP[22d] ; loc2
read MENU_SHIPINFO.var_2229_0 ; [81d ; 51h]
push 1
callasm SE_ArraySize
if SP[0]<=SP[1] then push 0 else push 1
if SP[0]=0 then jump L0010A828

становится:
Код:
           nop
           push       SP[2] ; loc22
           push       1
           call87     LaserDrawMaskColumn
           popx       6
           jump       L0010A892

Так вот, L0010A828 (когда уже заканчивается в оригинале луп как следствие рисование колонки) ведет к
Код:
L0010A828: pop
           jump       L0010A86A
L0010A86A: popx       4
           jump       L0010A892
Я просто сделал чтоб ввело к L0010A892. Это на примере 3.2.
Забыл кстати сделать проверку ID лазеров, но не критично - несуществующие SS_LASER или если даже просто сейчас какую-нибудь строку добавить наугад, то автоматом будет считаться Импульсной Пушкой)
    Добавлено: 08:16 28-08-2018   
DNA78
 419 EGP


Рейтинг канала: 9(1060)
Репутация: 70
Сообщения: 1165
Откуда: Кыргызстан
Зарегистрирован: 12.11.2008
Whiskas T-Mech :
Прям вот вырезать нет такого

После следующей компиляции обжа прям вот будет вырезан Подмигиваю
так как все коменты удалятся.
_________________
Очевидное-невероятное
    Добавлено: 10:57 28-08-2018   
ЛЕОПАРД
 89 EGP


Рейтинг канала: 4(75)
Репутация: 22
Сообщения: 277

Зарегистрирован: 05.04.2011
Whiskas T-Mech :
Чет я загнул про 30 новых... около 45 получилось пока (+15 где-то). Всё сделал:

Дружище, как ты это сделал?)
Очень бы помого если бы пропатчил ОБЖ AP 3.3. Потому-что у меня дофига новых пушек, а групп уже ппц как не хватает.
Для баланса это было бы нереально круто, т.к. можно почти каждую пушку в отдельный слот добавлять.
    Добавлено: 23:41 02-09-2018   
Whiskas
 137 EGP


Рейтинг канала: 3(36)
Репутация: 5
Сообщения: 139

Зарегистрирован: 28.04.2011
Да обновил аттач. Пихал файлы в папки L и types в \addon, но файлы не подхватываются, пришлось делать 05.cat/dat. Я в него не играю без понятия че там опять поменяли...
Если влево ещё сместить (4 и 5 значения на первой строке, заодно не забыв сократить переводы типа "Турель Левая Кормовая"), то можно попытаться до 50 видимых слотов сделать.

Тестите, особенно откат обжа. У меня вроде всё загружается т.е. не разрушительный патч вообщем. Только для 3.4 че-то не получилось в прошлый раз, может опять стоит попробовать Подозрение.
    Добавлено: 11:42 03-09-2018   
ЛЕОПАРД
 89 EGP


Рейтинг канала: 4(75)
Репутация: 22
Сообщения: 277

Зарегистрирован: 05.04.2011
Whiskas T-Mech, займись лучше альбионом, плиз...
Ну зачем ТС нужен? АР лучше оптимизирован.
    Добавлено: 12:18 03-09-2018   
za4ot
 475 EGP


Рейтинг канала: 5(187)
Репутация: 15
Сообщения: 3232
Откуда: Яма Изобилия
Зарегистрирован: 08.08.2012
ЛЕОПАРД :
Ну зачем ТС нужен?

ТС форева, АР маст дай!
_________________
Пираты - наше всё!
    Добавлено: 13:04 03-09-2018   
Whiskas
 137 EGP


Рейтинг канала: 3(36)
Репутация: 5
Сообщения: 139

Зарегистрирован: 28.04.2011
Никогда. Мне резонней просто из AP перенести новые корабли и конфиг продажи земных станций если уж приспичет, больше существенного я ничего не заметил. Повырезали декку, торус, сюжетки, эксплойты на размножение, а скрипт на войнушку с красными секторами мне вообще не сдался.

С картой разве что неплохо вышло, но надо на ноут ставить сначала и смотреть. Ят на квадратном. там не в тему делать если не выставить 1600x1200 каким-то образом. Такое я смог только на ЭЛТ монике, реально все мелкое становилось.
    Добавлено: 13:10 03-09-2018   
ЛЕОПАРД
 89 EGP


Рейтинг канала: 4(75)
Репутация: 22
Сообщения: 277

Зарегистрирован: 05.04.2011
za4ot :
ТС форева, АР маст дай!
Чушь.
Ну да ладно. Не буду тогда тратить свое и ваше время.
    Добавлено: 14:55 03-09-2018   
DNA78
 419 EGP


Рейтинг канала: 9(1060)
Репутация: 70
Сообщения: 1165
Откуда: Кыргызстан
Зарегистрирован: 12.11.2008
Whiskas T-Mech :
В аттаче для 3.2 готовый файл чисто на посмотреть + asm.

Хотелось бы полюбопытствовать, а для чего были изменены следующие строки:
"%d %s/%sВІ" на "%d %s/%s²"
"В«" и "В»" на "«" и "»"
"%dВ°" на "%d°"
_________________
Очевидное-невероятное
    Добавлено: 18:02 26-10-2018   
Dusky
 100 EGP

Репутация: 8
Сообщения: 828

Зарегистрирован: 29.05.2014
Есть ли возможность изменить источник апгрейдов для верфи? к примеру, в секторе док и аванпост, верфь ставит апгрейды с дока, изменить на аванпост. вынести док пробовал - не вышло, видимо привязка на уровне конкретной станции, а не "ближайший объект типа "Док оборудования"
    Добавлено: 18:39 27-10-2018   
Канал X3: Terran Conflict -> Модовый и скриптовый отсек X3: Terran Conflict: «X3TC Моддинг: obj-файлы и маленькие утилитки»
На страницу: Пред.  1, 2, 3 ... , 10, 11, 12  След.    Перейти:   Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Оно хочет за меня замуж! А я даже его пол не знаю! (испугался Zerge)

  » X3TC Моддинг: obj-файлы и маленькие утилитки | страница 11
Каналы: Новости | Elite | Elite: Dangerous | Freelancer | Star Citizen | X-Tension/X-BTF | X2: The Threat | X3: Reunion | X3: Terran Conflict | X Rebirth | X4: Foundations | EVE Online | Orbiter | Kerbal Space Program | Evochron | VoidExpanse | Космические Миры | Онлайновые игры | Другие игры | Цифровая дистрибуция | play.elite-games.ru | ЗВ 2: Гражданская война | Творчество | Железо | Игра Мечты | Сайт
   Дизайн Elite Games V5 beta.18