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

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

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

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


Репутация: 12
Сообщения: 54
Откуда: Galaxy far, far away...
Зарегистрирован: 17.01.2006
так как народу прибавляется, раньше или позже будут возникать проблемы с совместимостью исходников. Предлагаю обще-употребляемые вещи заносить в .inc файлы и тут выкладывать - будет проще для всех.

Вот файл-хидер для задания типов у параметров функций, используется при добавлении новых команд в скрипт-редактор

пример задания параметров функции:
Код:

           push       0FFFFh ; -1d
           push       2
           push       0412h ; 1042d      ; command ID
           push       4                  ; always=4
           create_array
           push       4
           push       0Fh ; 15d          ; %1 parameter definition
           push       14h ; 20d          ; %0 parameter definition
           push       2                  ; number of parameters
           create_array
           push       2                  ; always=2
           create_array


parameter definition - как раз и есть коды, обозначающие типы параметров. Все внутри файла на странице
_________________
THX2U
    Добавлено: 17:27 04-02-2006   
Darth Revan
 345 EGP


Рейтинг канала: 5(153)
Репутация: 42
Сообщения: 349
Откуда: Belarus Prime
Зарегистрирован: 01.02.2006
2 ZMan. По-моему, 25d и 26d - разные вещи. 25d позволяет опустить в редакторе приём возвращаемого значения, а 26d нет.
    Добавлено: 23:13 04-02-2006   
Zman
 65 EGP


Репутация: 12
Сообщения: 54
Откуда: Galaxy far, far away...
Зарегистрирован: 17.01.2006
Darth Revan

26d, как я понял, может быть NULL при возврате из функции
а 25d всегда со значением

народ, никто не разбирался как новые команды добвляются штатным способом через AddNewCmd ? вроде бы все нашел... Таблицы команд с параметрами как задаются - видно, а ссылок на обработчики нету Подозрение.
_________________
THX2U
    Добавлено: 19:47 05-02-2006   
Darth Revan
 345 EGP


Рейтинг канала: 5(153)
Репутация: 42
Сообщения: 349
Откуда: Belarus Prime
Зарегистрирован: 01.02.2006
Zman :

26d, как я понял, может быть NULL при возврате из функции а 25d всегда со значением.

25d можно не принимать, а 26d - нельзя. По-моему, так.
    Добавлено: 20:42 05-02-2006   
Zman
 65 EGP


Репутация: 12
Сообщения: 54
Откуда: Galaxy far, far away...
Зарегистрирован: 17.01.2006
сделал тут попутно отключалку сюжета насовсем
то есть при рестарте игры сразу вылетаешь на диско в космос

если вдруг кому-то надо:
Код:

DisablePlot = TRUE

        .section   code, abs


.if DisablePlot
$ = 0015F34Ch
        ret
.endif
        .end


можно накладывать поверх любого патча (компилить отдельным файлом), либо просто добавить в текст патча Shaddie перед строкой ".section code, con" только вот это:
Код:

$ = 0015F34Ch
        ret

_________________
THX2U
    Добавлено: 18:12 06-02-2006   
AlexYar
 1846 EGP


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

Зарегистрирован: 26.10.2003
Zman :
то есть при рестарте игры сразу вылетаешь на диско в космос


А можно сделать выбор стартового корабля как-нибудь? Я имею в виду - прямо в асм-файле. Ну типа субтип корабля как-нить прописывать там.

И самое главное - нафиг отключить появление хааков в Президентском Рубеже и вообще в игре (khaak aggression всегда 0)? А то игра через какое-то время все равно агрессию выставляет в 15, и хааки появляются.
    Добавлено: 18:32 06-02-2006   
Zman
 65 EGP


Репутация: 12
Сообщения: 54
Откуда: Galaxy far, far away...
Зарегистрирован: 17.01.2006
а разве первый корбаль не в setup скриптах прописан ?
_________________
THX2U
    Добавлено: 18:48 06-02-2006   
Zman
 65 EGP


Репутация: 12
Сообщения: 54
Откуда: Galaxy far, far away...
Зарегистрирован: 17.01.2006
сделать хааков всегда дружелюбными (не тестировал!):
Код:

$ = 000AC908h
     push   0

правда это может на сюжет как-то влиять кажется Подмигиваю
после этого патча команда <set khaak agression level to %1> тоже работать перестанет!
_________________
THX2U
    Добавлено: 18:55 06-02-2006   
Darth Revan
 345 EGP


Рейтинг канала: 5(153)
Репутация: 42
Сообщения: 349
Откуда: Belarus Prime
Зарегистрирован: 01.02.2006
Изначально корабль прописан в коде. Но можно скрипт добавить, который возвращает корабль, и старт будет с этого корабля в том месте, где он находится.
    Добавлено: 19:10 06-02-2006   
AlexYar
 1846 EGP


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

Зарегистрирован: 26.10.2003
Zman :
а разве первый корбаль не в setup скриптах прописан ?


Только для "custom game".

Zman :
правда это может на сюжет как-то влиять кажется


Дык и сюжет отключить нафиг Улыбка Главное - сделать возможным определить в скрипте при старте игры с каким уровнем сложности начал игрок. Т.е. чтобы при старте игры запускался скрипт, а в него аргументом передавалось значение сложности игры (1-3).

Darth Revan :
Но можно скрипт добавить, который возвращает корабль, и старт будет с этого корабля в том месте, где он находится.


Именно это и нужно, но еще и в аргумент передавать уровень сложности.

Сейчас при старте на открывахе определить уровень сложности скриптом легко - по оборудованию на корабле и деньгам. А вот если начать в скафандре, то тут фокус с оборудованием не прокатывает.


Вопрос у асм-умельцам. Пожалуйста, поработайте над дополнительными расами, ну очень надо Рыдания.

10 дополнительных очень мало (надо 50 и более). А так же нужно иметь возможность как-то менять отношения между расами (хотя бы прямо в асм-файле). Просто менять отношение к игроку в игре можно, а вот между самими расами никак нельзя Расстроен
    Добавлено: 22:54 06-02-2006   
CheckerTwo
 550 EGP


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

Сначала небольшое вступление...

Команда 005E представляет собой косвенный переход по таблице адресов. Очень даже может быть, что КС язык от эгософта имеет С-образную конструкцию switch {...}. Для такой конструкции компилятор ES генерит 2 варианта кода.
Первый вариант: перед командой 005E вставляется стандартный проверочный код, проверяющий верхний предел индекса. Если входное значение превышает этот предел, принудительно будет выполнен переход с индексом 0. При дизассемблировании такого варианта кода дизассемблер проверяет несколько предыдущих команд, находит константу верхнего предела и вычисляет размер таблицы переходов. В компиляторе для Х2 в кодогенераторе КС для этого варианта была ошибка, в результате чего размер таблицы переходов был в 2 раза больше необходимого. Для Х3 эту ошибку пофиксили.

Код:

      push     SP[0]
      push     SP[0]
      push     3           ; <- верхний предел
      if SP[0]<SP[1] then push 0 else push 1
      if SP[0]<>0 then jump $1
      pop
      push     0           ; idx <- default переход
$1:   switch
      case jump  L00000980 ; 0 - default переход
      case jump  L000008E2 ; 1
      case jump  L00000904 ; 2
      case jump  L00000926 ; 3
      case jump  0h        ; 4
      case jump  0h        ; 5
      case jump  0h        ; 6
      endswitch


Второй вариант трансляции switch {} использует команду locate (005F), выполняющую поиск значения в таблице. При дизассемблировании такого варианта кода дизассемблер смотрит на команду, стоящую перед командой locate, определяя размер таблицы. В этом варианте таблица имеет верный размер.

Код:

$1:   push     0111h ; 273d
      push     01B1h ; 433d
      push     1Bh   ; 27d
      push     3
      locate
      switch
      case jump  L000100E8 ; 0 - default переход
      case jump  L00010076 ; 1
      case jump  L00010076 ; 2
      case jump  L0001009C ; 3
      endswitch


Это было вступление, так на всякий случай для новичков.

Теперь первое предложение.

На текущий момент дизассемблер правильно разбирает только стандартно-сгенерированную последовательность команд, относящихся к конструкции switch...endswitch. Если при написании патча моддер вставит другую последовательность команд, дизассемблер не сможет корректно восстановить код switch-конструкции. Это не означает, что данная программа однозначно не будет работать. Это означает, что я не знаю как написать ИИ для дизассемблера, определяющего размер таблицы переходов. Улыбка
Поэтому первое предложение для асм-щиков - пишите код, аналогичный стандартному от ES. Это относится только к команде switch, точнее к тем командам, которые предшествуют switch.
Тогда если вдруг решите проверить корректность написания программы, при дизассемблировании вашего obj не будет ОЧЕНЬ страшных ругательств. Улыбка Дизассемблировав убедитесь, что в листинге отсутствуют ошибки работы со стеком типа "function at addr = ХХХ has corrupted phase stack (NNN <> MMM)". Ну или чего-то в том духе. Улыбка

Теперь второе предложение : Изменение синтаксиса switch.

Задумка использовать в ассемблере конструкцию языка высокого уровня вида switch - case jump - endswitch, оказалась мягко говоря неудачной. Во-первых из-за того, что данная конструкция считается ассемблером единой неделимой командой. И правка такой конструкции в общем случае затруднительна. Во-вторых, из-за того, что такая конструкция при парсинге длинных таблиц требует офигенный стек ассемблера. Посему предлагаю считать синтаксис switch..endswitch - устаревшим и заменить его командой XJUMP @SP, символизирующей косвенный переход по таблице, расположенной следом за этой командой. Таблица будет представлять собой просто последовательность директив .long, содержащими адрес метки перехода.
Выглядеть будет примерно вот так:

Код:

$1:   push     0111h ; 273d
      push     01B1h ; 433d
      push     1Bh   ; 27d
      push     3
      locate
$1:   xjump    @SP
      .long    ($2 - 8) / 2 ; 0 - default переход
      .long    ($3 - 8) / 2 ; 1
      .long    ($4 - 8) / 2 ; 2
      .long    ($5 - 8) / 2 ; 3


Что скажите?
    Добавлено: 18:27 08-02-2006   
Darth Revan
 345 EGP


Рейтинг канала: 5(153)
Репутация: 42
Сообщения: 349
Откуда: Belarus Prime
Зарегистрирован: 01.02.2006
Я согласен.
    Добавлено: 20:25 08-02-2006   
Zman
 65 EGP


Репутация: 12
Сообщения: 54
Откуда: Galaxy far, far away...
Зарегистрирован: 17.01.2006
CheckerTwo :
Что скажите?


через Е ! Подмигиваю "скажете" - (сорри, привычка такая...)


два вопроса:
1) генерить в своем коде лишнюю вторую половину неправильного свича - не надо ? Улыбка

2) ты хочешь синтакс сделать вместо или оба вместе ? Улыбка

в принципе как сделаешь, так и будем юзать, не вижу тут больших проблем.



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

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

Зачем это нужно ? тогда мы сможем полностью компилить x2story.asm из исходника и переносимость/совместимость будет лучше. Если сейчас ягасофт выпустит новый патч 1.5, все наши исходники поползут по абсолютным адресам, придется перелопачивать сначала... А так в исходник добавили свои патчи, перекомпилили и все... К тому же в старом файле сейчас очень много дырок (мертвый код плюс те самые хвосты от switch). Если пересобрать все заново, может где-то производительность поднимется (?).

Я тут по ходу дела попытался отключить заставку в скрипт эдиторе...
ну когда первый раз его запускаешь он там мееееедленно пишет:
"welcome to M.S.C.I interface...." etc etc

думал из-за звука (на каждую букву пиликает)... звук отрезал, так оно печатает с такой же скоростью! искусственных задержек там нету, просто в цикле выполняется вырезание каждой буквы из строки и вывод по одной на экран. Так оно само по себе так медленно выводит блин! вот вам и скорость работы скриптов... а у меня их крутится 4500 штук за раз в обычной игре...

( то, что можно порезать эту строку в .xml - я знаю Улыбка )
_________________
THX2U
    Добавлено: 20:59 08-02-2006   
Darth Revan
 345 EGP


Рейтинг канала: 5(153)
Репутация: 42
Сообщения: 349
Откуда: Belarus Prime
Зарегистрирован: 01.02.2006
Zman :
ну когда первый раз его запускаешь он там мееееедленно пишет:

А если на ввод или пробел нажать?
    Добавлено: 02:28 09-02-2006   
CheckerTwo
 550 EGP


Рейтинг канала: 4(96)
Репутация: 103
Сообщения: 412
Откуда: Tomsk
Зарегистрирован: 18.08.2004
Zman :
1) генерить в своем коде лишнюю вторую половину неправильного свича - не надо ? Улыбка

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

Zman :
2) ты хочешь синтакс сделать вместо или оба вместе ? Улыбка

Ну пока будут жить вместе. Генерацию в dobj сделал по ключу в ini.

Zman :
хочу вернуться в вопросу о патчах!
...
Зачем это нужно ? тогда мы сможем полностью компилить x2story.asm из исходника и переносимость/совместимость будет лучше.

Все к этому и идет. Вот сделал в дизассемблере, чтоб он закомментаривал неиспользуемый код. Попытался восстановить более подробное описание о функциях.

Zman :
Если сейчас ягасофт выпустит новый патч 1.5, все наши исходники поползут по абсолютным адресам, придется перелопачивать сначала... А так в исходник добавили свои патчи, перекомпилили и все... К тому же в старом файле сейчас очень много дырок (мертвый код плюс те самые хвосты от switch). Если пересобрать все заново, может где-то производительность поднимется (?).

Ну патча 1.5 точно не будет никогда. Улыбка Они Х3-то доделать не могут.
Производительность конечно поднимется, но несущественно. Нужно переделывать отдельные куски. Для этого нужно примерно определить, какие из процедур-функций выполняются наиболее часто. Собрав статистику можно пытаться оптимизировать. К сожалению неизвестно сколько времени выполняется каждая команда.
    Добавлено: 07:38 09-02-2006   
CheckerTwo
 550 EGP


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

Трассировщик дизассемблера пытается вытащить дополнительную инфу о функция и переменных. Кроме того, в asm-файле закомментаривает текст, который недоступен по его мнению.

Ассемблеру добавил команды pushw (0001) и pushd (0002). Кроме того понимает xjump @sp.
    Добавлено: 19:25 09-02-2006   
Darth Revan
 345 EGP


Рейтинг канала: 5(153)
Репутация: 42
Сообщения: 349
Откуда: Belarus Prime
Зарегистрирован: 01.02.2006
CheckerTwo, респектище за трассировщик. Супер! Так стало гораздо лучше.
    Добавлено: 21:03 09-02-2006   
Zman
 65 EGP


Репутация: 12
Сообщения: 54
Откуда: Galaxy far, far away...
Зарегистрирован: 17.01.2006
CheckerTwo - Пьем пиво вместе!
_________________
THX2U
    Добавлено: 16:12 10-02-2006   
Zman
 65 EGP


Репутация: 12
Сообщения: 54
Откуда: Galaxy far, far away...
Зарегистрирован: 17.01.2006
CheckerTwo
слушай, что-то я там не пойму логику генерации комментариев...

заголовки функций у тебя местами function, местами procedure
а закономерность я так и не нашел Подмигиваю
_________________
THX2U
    Добавлено: 16:15 13-02-2006   
CheckerTwo
 550 EGP


Рейтинг канала: 4(96)
Репутация: 103
Сообщения: 412
Откуда: Tomsk
Зарегистрирован: 18.08.2004
Zman :
заголовки функций у тебя местами function, местами procedure


Идея была такой. Если функция вызывается где-то в коде и ее результат используется, т.е. после call стоит не pop, то это "функция", иначе - процедура.
Улыбка
    Добавлено: 18:23 13-02-2006   
Канал X2: The Threat: «X2-ASM - это проcто!»
На страницу: Пред.  1, 2, 3, 4, 5, 6 ... 10, 11, 12  След.    Перейти:   Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Какая-то дебильная тема, но лишать ее своего присутствия почему-то влом. (SunnyGale)

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