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

  » X2-ASM - это проcто! | страница 8
Конференция предназначена для общения пилотов. Для удобства она разделена на каналы, каждый из которых посвящен определенной игре. Пожалуйста, открывайте темы только в соответствующих каналах и после того, как убедитесь, что данный вопрос не обсуждался ранее.

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

   Страница 8 из 12
На страницу: Пред.  1, 2, 3 ... 7, 8, 9, 10, 11, 12  След.    Перейти:   Все страницы
Поиск в этой теме:
Канал X2: The Threat: «X2-ASM - это проcто!»
Darth Revan
 345 EGP


Рейтинг канала: 5(153)
Репутация: 42
Сообщения: 349
Откуда: Belarus Prime
Зарегистрирован: 01.02.2006
CheckerTwo :
А там вроде в листинге перед каждой дизассемблированной командой стоит число - текущий стек. Это не подойдет?

Подойдёт конечно. Я ухитрился не обратить внимания Улыбка Просто пользуюсь в основном asm, а не out. Последний раньше использовал, только для поиска адресов.

Спасибо за доработку и инфу по препроцессору - то, чего очень не хватало.

CheckerTwo :
Извиняюсь за задержку, в гости ездил.


Я тоже давно не заглядывал, ваял транслятор X-C -> X-Asm с C-подобного языка в X-Asm. Сделаю мелкие добаботки и выложу завтра. Десять дней... Гы-гы
    Добавлено: 01:34 14-08-2006   
CheckerTwo
 550 EGP


Рейтинг канала: 4(96)
Репутация: 103
Сообщения: 412
Откуда: Tomsk
Зарегистрирован: 18.08.2004
Darth Revan :
ваял транслятор X-C -> X-Asm с C-подобного языка в X-Asm. Сделаю мелкие добаботки и выложу завтра.

O-o! Улыбка Класс!
Из-за отсутствия свободного времени я даже не пытался начинать такой проект. Только в мечтах...

Darth Revan :
Спасибо за доработку и инфу по препроцессору - то, чего очень не хватало.

Препроцессор мало тестил и могут быть косяки. Потому и инфу не выкладывал. Улыбка
    Добавлено: 08:46 14-08-2006   
Darth Revan
 345 EGP


Рейтинг канала: 5(153)
Репутация: 42
Сообщения: 349
Откуда: Belarus Prime
Зарегистрирован: 01.02.2006
2 CheckerTwo. Сложно ли убрать проверку на наличие потомков у класса, чтобы можно было добавлять переменные к классам с наследниками, причём так, чтобы наследники считали, будто этих переменных нет, т.е. чтобы у них адреса не смещались?

Дело в том, что очень нужно добавлять переменные в базовые классы, а полную перекомпиляцию делать не хочется - и адреса все едут, и долго каждый раз компилировать, и смотреть надо, в чём именно проблемы возникают на перекомпилином обже.

Естественно, что если просто добавить переменную в базовый класс, чтобы не смещались адреса у потомков, то первая переменная первого потомка зашарится с нашей новой. Однако есть идея. Вместо того, чтобы добавлять переменную в базовый класс, скажем, TSCRIPT, TSHIP или TSTATION, можно добавить по переменной (скажем, new_var) в каждый неабстрактный их наследник и сделать виртуальные функции GetNewVar и SetNewVar (кстати, как я понял, вызов по call считается всегда динамическим, как в Java?) И было бы всё хорошо и в каждом созданном объекте было бы по одной переменной new_var в листе дерева наследования, если бы у неабстрактных классов не было бы наследников. Но такое встречается. Например, TOBJ_SHIP_KHAAKCLUSTER = class(TSHIP_M3), TFACTORY_SHIP = class(TFACTORY) и др. Но если бы была возможность добавлять пременные в базовый класс без смещения адресов у потомков, я бы добавил, на примере последней пары TFACTORY_SHIP,TFACTORY переменные и виртуальные функции в оба класса. Тогда если объект у нас типа TFACTORY, то всё OK - потомка вообще нет. Если же он типа TFACTORY_SHIP, то переменная в нашем объекте от TFACTORY на самом деле не нужна и к ней не будет обращений (т.к. обращение через функции GetNewVar и SetNewVar будет к переменной класса TFACTORY_SHIP) и может быть спокойно затёрта первой переменной от объекта TFACTORY_SHIP. Т.е. тогда реально была бы опять одна переменная. Для надёжности можно сделать new_var типа .vint, чтобы не возникло, в случае чего, проблем со сборщиком мусора.
    Добавлено: 14:02 28-08-2006   
CheckerTwo
 550 EGP


Рейтинг канала: 4(96)
Репутация: 103
Сообщения: 412
Откуда: Tomsk
Зарегистрирован: 18.08.2004
Darth Revan :
Сложно ли убрать проверку на наличие потомков у класса, чтобы можно было добавлять переменные к классам с наследниками, причём так, чтобы наследники считали, будто этих переменных нет, т.е. чтобы у них адреса не смещались?

Убрать-то можно. Просто в INI-файле изменить статус сообщения об ошибке с "E" на "W" или "N". Будет выдаваться либо предупреждение либо Note. При этом генерация OBJ файла разрешена. Но у меня были случаи, когда Х2 падала при загрузке из сейва после таких модификаций Расстроен. Может, конечно я силно косячный патч писал, но вот так... Это дело обсуждали с Shaddie, и решили, что лучше так не делать...
    Добавлено: 18:13 02-09-2006   
SD
 251 EGP


Рейтинг канала: 2(21)
Репутация: 30
Сообщения: 2436

Зарегистрирован: 05.03.2006
Конечно, сохраненка и правленные обжи вообще совместимы только при удачном стечении обстоятельств. А при новой игре тоже падала?
    Добавлено: 07:43 04-09-2006   
Darth Revan
 345 EGP


Рейтинг канала: 5(153)
Репутация: 42
Сообщения: 349
Откуда: Belarus Prime
Зарегистрирован: 01.02.2006
Я пишу совместимые. Я вообще пишу для X2 на обжах. Так, что всё можно править на сохранёнке. Но если начнёшь на патче, а продолжишь на чистом - упадёт.
    Добавлено: 23:32 04-09-2006   
SD
 251 EGP


Рейтинг канала: 2(21)
Репутация: 30
Сообщения: 2436

Зарегистрирован: 05.03.2006
Ну а мне удавалось сотворить несовместимые. Всего-то потребовалось сместить вызов DoSaveGame и при загрузке образовались такие чудеса...
    Добавлено: 07:43 05-09-2006   
Darth Revan
 345 EGP


Рейтинг канала: 5(153)
Репутация: 42
Сообщения: 349
Откуда: Belarus Prime
Зарегистрирован: 01.02.2006
Причина может и быть как раз в смещении адресов. После загрузки на новом обже выполнение после команды началось по старому адресу, а там находится уже не то.
    Добавлено: 12:52 05-09-2006   
CheckerTwo
 550 EGP


Рейтинг канала: 4(96)
Репутация: 103
Сообщения: 412
Откуда: Tomsk
Зарегистрирован: 18.08.2004
SD :
После полной перекомпиляции x2story у меня в игре полностью отпал строковый ввод: ни корабль переименовать ни в скриптовом редакторе строку набрать...

Shaddie нашел-таки косяк. Респект.
Проблема была в следующем:
Некоторые объекты содержат инициализированные строковые переменные.
Для этих переменных дизассемблер генерил примерно вот такой код
Код:

ms_DefaultCharSet : string = 00008A92h ; 35474d;

А так как при ассемблировании адреса строк изменяются, это приводило к неработоспособности процедур, использующих инициализированные строки.
Дизассемблер поправил.

В ассемблере изменил синтаксис объявления строковых переменных:
Код:

           .section   code, con
;
;.vstr   <id>             ; неинициализированная переменная
;.vstr   <id> = <label>   ; указатель на строку в секции STRG
;.vstr   <id> = <string>  ; строка

; например
.vstr test1                 ; просто переменная без инициализации
.vstr test2 = STR_01        ; используется метка на строку
.vstr test3 = "init string" ; используется строка

           .section   strg, con

STR_01:    .ascii "init_string for var test2"


Второй вариант - это "общий случай" - такой код генерирует дизассемблер.
В третьем варианте (объявление test3) ассемблер автоматом создаст запись в секции STRG и вставит ссылку на нее в описатель переменной.

Поправил дизассемблер и ассемблер. Ссылка в первом посте.
    Добавлено: 09:45 06-09-2006   
Darth Revan
 345 EGP


Рейтинг канала: 5(153)
Репутация: 42
Сообщения: 349
Откуда: Belarus Prime
Зарегистрирован: 01.02.2006
Супер! Всё, буду всё делать на полностью перекомпилированных обжах.
    Добавлено: 03:46 07-09-2006   
SD
 251 EGP


Рейтинг канала: 2(21)
Репутация: 30
Сообщения: 2436

Зарегистрирован: 05.03.2006
И вот они-то будут точно несовместимы с сохраненками никоим образом.
Shaddie - супер! Мегареспект.
    Добавлено: 07:32 07-09-2006   
Darth Revan
 345 EGP


Рейтинг канала: 5(153)
Репутация: 42
Сообщения: 349
Откуда: Belarus Prime
Зарегистрирован: 01.02.2006
Да. Придётся разок начать игру заново.
    Добавлено: 13:18 07-09-2006   
SD
 251 EGP


Рейтинг канала: 2(21)
Репутация: 30
Сообщения: 2436

Зарегистрирован: 05.03.2006
2Checker Two: Что-то эта новая версия ассемблера как-то нервно относится к содержимому комментариев. На казалось бы безобидный кусок:
; my function is smaller, so - simply overwrite whole part
он выдает
pass1:(TSHIP.AttackRunOnTarget.asm:17) Err: Invalid number.

EDIT: Виноват, ругается он на самом деле на строчку
Код:
           pushw       01CE1FFh

но в листинге указывает совсем другой файл (да и номер строки не тот).
    Добавлено: 11:33 14-09-2006   
Darth Revan
 345 EGP


Рейтинг канала: 5(153)
Репутация: 42
Сообщения: 349
Откуда: Belarus Prime
Зарегистрирован: 01.02.2006
Да, с листингом проблемы с самого начала. Иногда ошибки указывают не на тот файл. Но это мне не мешает. И другим, я думаю, также не сильно. Так что, Чекер, не обращай внимания. Улыбка

Кстати, раз уж зашла речь о мелких багах, то я заметил ещё мелкий баг, также, вероятно, древний. Если слишком далеко отнести описание функции-метода внутри .classdef и начать её собственно писать (особенно если в разных файлах), то получается глюк. Но это всё ерунда.
    Добавлено: 14:50 14-09-2006   
AlexYar
 1850 EGP


Рейтинг канала: 6(442)
Репутация: 328
Сообщения: 31614

Зарегистрирован: 26.10.2003
Подскажите плз Гы-гы Как сделать inc-файл к ассемблеру (чтобы потом к патчам прикреплять) в котором нужно всего по одному конкретному адресу заменить одно значение на другое?

К примеру, я поковырялся в x3story.out и нашел место, где задается кол-во патронов в ящике боеприпасов. Там 200, а мне надо 1 сделать.

Конечно я его в hex-редакторе уже поменял и в игре юзаю вовсю, но в виду выхода разных патчей и того, что таких фиксов может быть много, а ждать выхода очередного патча некогда, да и программеров чтобы по мелочам не напрягать, чтобы самому всё добавить и чтобы не править каждый раз в хекс-редакторе - проще сделать inc-файл я думаю, он же к любой версии патча для одной версии игры подойдет, так?
    Добавлено: 06:45 22-09-2006   
SD
 251 EGP


Рейтинг канала: 2(21)
Репутация: 30
Сообщения: 2436

Зарегистрирован: 05.03.2006
Как повезет. Патчи (в том числе Игософтовские) могут сместить адрес. Делается примерно так (если менять константу:
Код:

.SECTION code, abs
$ = 0<где_нужно>h
    .word <твоя константа>

Главное точно попасть в адрес операнда а не операции - проверяй дизассемблированием после патча.
    Добавлено: 07:20 22-09-2006   
AlexYar
 1850 EGP


Рейтинг канала: 6(442)
Репутация: 328
Сообщения: 31614

Зарегистрирован: 26.10.2003
SD :
Главное точно попасть в адрес операнда а не операции - проверяй дизассемблированием после патча.


Не, мне попадать не нужно. Адрес мне известен точно, значение для того адреса тоже, нужно просто поменять. А патчи я имел в виду не егософта, а пилотов Улыбка

К примеру в хекс-редакторе я прыгаю на адрес B55C1 и меняю там C8 на 01.

Т.е. в x3story там такая строка:

000B55BE: 0001 00C8 | 1 pushw 200d ; 0C8h

А мне нужно, чтобы там вместо 200d был 1d.

Если я правильно понимаю, то писать нужно так:

Цитата:

AmmoInBox = 1d

.section code, abs

$ = 000B55BEh
pushw AmmoInBox




Ничего не напутал? Подозрение.



И еще попутно вопрос по х3, раз такая темка на два канала...

В х2 была блокировка на загрузку скриптов большей версии скриптдвижка, чем есть сама игра. Ну т.е. если скрипт писан на версии скриптдвижка 28, а в самой игре версия скриптдвижка 21, то скрипт не отображался в списке скриптов, и вообще его для игры как бы не было. Так?

Поменял версию скриптдвижка в х3 (в трех местах, с патча Шадди методу взял, только адреса под х3 поменял) на 35. Вобщем в меню редактора пишется 35, в сохраняемых скриптах пишется 35 и команда engine version возвращает 35. Сделал новый скрипт, сохранил, затем вышел из игры, вернул оригинальный обж, запускаю игру, начинаю новую, захожу в редактор скриптов и в листинге скриптов вижу свой новый скрипт Расстроен И чего делать? Как правильно версию скриптдвижка поменять?
Для х2 вроде как больше 32 ставить нельзя, на всякий случай пошел другим путём - поставил версию скриптдвижка 1, захожу в игру - всё равно все скрипты видно Рыдания.
    Добавлено: 08:43 22-09-2006   
Shaddie
 556 EGP


Рейтинг канала: 4(60)
Репутация: 118
Сообщения: 261
Откуда: Томск
Зарегистрирован: 09.09.2004
AlexYar :
Как сделать inc-файл к ассемблеру (чтобы потом к патчам прикреплять) в котором нужно всего по одному конкретному адресу заменить одно значение на другое?

1. В файл ux3story.asm добавить строчку:
.include "аmmunition.inc"
2. Создать файл ammunition.inc содержащий следующий код:

AmmoInBox = 1d
$ = 000B55C0h
.word AmmoInBox

AlexYar :
$ = 000B55BEh
pushw AmmoInBox

Можно и так.

AlexYar :
В х2 была блокировка на загрузку скриптов большей...
Смотреть код надо.
_________________
Быстро едешь, тихо понесут...
    Добавлено: 09:34 22-09-2006   
Darth Revan
 345 EGP


Рейтинг канала: 5(153)
Репутация: 42
Сообщения: 349
Откуда: Belarus Prime
Зарегистрирован: 01.02.2006
CheckerTwo, огромный респект, что довёл до ума возможность перекомпилировать обжи. Я разбил патч для X2 на две части, т.е. большая часть ушла в x2story.asm, а меньшая, часто меняющаяся, в ux2story.asm. Так что все плюсы и полной перекомпиляции x2story.asm, и быстрой компиляции ux2story.asm с совместимостью сейвов. Отдельное спасибо за директиву .value, дающую возможность создавать автоматически поддерживающуюся таблицу адресов в начале x2story.asm.

Маленькая просьба - нужно либо вообще убрать Note Name of type is ignored, или сделать возможность отключения строчкой в ini-файле. А то их более восьми тысяч. А ошибки бывают в середине, и искать их в груде мусора очень неудобно.
    Добавлено: 13:14 22-09-2006   
CheckerTwo
 550 EGP


Рейтинг канала: 4(96)
Репутация: 103
Сообщения: 412
Откуда: Tomsk
Зарегистрирован: 18.08.2004
Darth Revan :
Да, с листингом проблемы с самого начала. Иногда ошибки указывают не на тот файл. Но это мне не мешает. И другим, я думаю, также не сильно.

Кажись подправил. Спасибо...

Darth Revan :
Кстати, раз уж зашла речь о мелких багах, то я заметил ещё мелкий баг, также, вероятно, древний. Если слишком далеко отнести описание функции-метода внутри .classdef и начать её собственно писать (особенно если в разных файлах), то получается глюк.

Не могу смоделировать ситуацию. Можешь мне намылить пример минимальной длины, который приводит к этой ошибке?

Darth Revan :
Маленькая просьба - нужно либо вообще убрать Note Name of type is ignored, или сделать возможность отключения строчкой в ini-файле.

Вставил модификатор для сообщений IGNORE, в ini-файле строки, помеченные символом "I", не будут вставляться в листинг.

Акромя того, добавил директиву .settime <строка_дата_время>.
Например
.settime "05-10-2006 00:59:59" ; 5 октября 2006 года
Записывает в секцию CTIM obj-файла указанную дату и время. Работает только для Х3, для ХТ/Х2 - не работает.

Немного подправил дизассемблер...

Поправленные версии лежат вот здесь дизассемблер и ассемблер. Ссылка в первом посте.
    Добавлено: 14:36 05-10-2006   
Канал X2: The Threat: «X2-ASM - это проcто!»
На страницу: Пред.  1, 2, 3 ... 7, 8, 9, 10, 11, 12  След.    Перейти:   Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Если не во что играть, можно в конфе отдыхать!

  » X2-ASM - это проcто! | страница 8
Каналы: Новости | 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