Дизасм Elite

Гость

Сообщение Гость »

dr.Titus писал(а):
Кстати, убирание рамки вокруг экрана и расширение рабочего поля на нее - не убыстрит ли игру?
Ну это уже сделано, не убыстрило, наоборот немного замедлило, так как теперь окружности рисуются на большем поле, линии и так рисовались, я уже писал, просто было прикрыто черным инком.
GoodBoy писал(а):
вроде Кладов как раз это и сделал
Да я читал об этом, что именно было сделано не знаю, когда закончу разбираться с 3д посмотрю. Код у Кладова хороший, я вскользь смотрел, но там основной упор на размер был.
Гость

Сообщение Гость »

Как идея думаю работу с текущим объектом сделать через копируемый буфер, во первых освободит индексную пару, во вторых уберет кучу чтений по смещению, хорошо скажется на размере и скорости.
Гость

Сообщение Гость »

Из простого и пиздатого, умножение о котором сказано в факте 3
Если нужен только старший байт и немного похуй на точность
Код:;char A(X) = char B * char CA_BxC_AB0B; change adhllda, bsubcjrnc, .loc_AB11lda, csubb.loc_AB11rraldh, 1+high sq_tab_be00ldl, aldd, (hl)lda, badda, crraldl, alda, (hl)subdret

Полностью, но на точность так же похуй
Код:; int HL=char B * char CHL_BxC_AB34lda, bsubcjrnc, .loc_AB3Alda, csubb.loc_AB3Arraldh, 1+high sq_tab_be00ldl, aldd, (hl)dechlde, (hl)lda, badda, crraldl, alda, (hl)subelde,ainchlda, (hl)sbca, dldh, aldl,eret

Вроде в обоих немного переделывал, но совсем по мелочи.
Аватара пользователя
dr.Titus
Сообщения: 929
Зарегистрирован: 08 июл 2016, 00:00

Сообщение dr.Titus »

Это ты для демонстрации привел их, как там делается?
Или это уже какие-то нововведения и убыстрения?
Гость

Сообщение Гость »

dr.Titus писал(а):
Это ты для демонстрации привел их, как там делается?
Или это уже какие-то нововведения и убыстрения?
Изображение Я не знаю, и то и то, просто мне нравиться такие штуки в коде когда просто и эффективно, может кого еще прикалывает. Так как с линией разобрались, я посмотрел прекалк, там ад с флаговыми таблицами и при этом весьма шустрый, разложил пару веток с небольшим компромиссом из твоих предложений, на длинных линиях конечно прилично прибавило, но они там не настолько часто встречаются, в основном пикселей до 20, а на этом экономия не такая существенная так как нужно еще разложить направления.
Хватит откладывать математику.
Глянул краем глаза у Кладова глюкан с отображением не починен, а это значит он в код расчета 3д вообще не лазил. В моделях там да есть неиспользуемые биты видимо он их уплотнил.
Гость

Сообщение Гость »

Вопрос к игрокам по перехвату в гипере таргонами. Если вас перехватили и вы всех поубивали, пособирали алиент итемсы возникает патовая ситуация, топливо сожжено, вы на пол пути к цели, звезды нет, планеты нет, то есть все гейм овер? Думаю поправить данный момент, сделать что бы топливо сжигалось пропорционально пройденному расстоянию, но может есть нормальный способ продолжить игру?
Аватара пользователя
GoodBoy
Сообщения: 676
Зарегистрирован: 09 июл 2016, 00:00

Сообщение GoodBoy »

продублировал вопрос там где задротов побольше.
Гость

Сообщение Гость »

GoodBoy писал(а):
продублировал вопрос там где задротов побольше.
Спасибо Изображение
Аватара пользователя
GoodBoy
Сообщения: 676
Зарегистрирован: 09 июл 2016, 00:00

Сообщение GoodBoy »

и чуток погуглил
"Перед боем надо заправиться топливом у звезды и оттуда сделать гиперпереход. Следите, чтобы в этот момент надпись FUEL SCOOPS ON была на экране.

Эффект следующий. Во время боев в гиперпространстве все время будет гореть эта надпись, как будто дозаправка топливом не прекращалась. Вы сможете переходить от одной атаки к другой, не боясь "застрять" в космосе. Кстати, это мероприятия одновременно предохранит Вас от утечек горючего при повреждениях в бою (FUEL LEAK!)."
Аватара пользователя
Hippiman
Сообщения: 152
Зарегистрирован: 10 июл 2016, 00:00

Сообщение Hippiman »

GoodBoy писал(а):
и чуток погуглил
"Перед боем надо заправиться топливом у звезды и оттуда сделать гиперпереход. Следите, чтобы в этот момент надпись FUEL SCOOPS ON была на экране.

Эффект следующий. Во время боев в гиперпространстве все время будет гореть эта надпись, как будто дозаправка топливом не прекращалась. Вы сможете переходить от одной атаки к другой, не боясь "застрять" в космосе. Кстати, это мероприятия одновременно предохранит Вас от утечек горючего при повреждениях в бою (FUEL LEAK!)."

Больше на баг похоже.
Гость

Сообщение Гость »

GoodBoy писал(а):
и чуток погуглил
Ну это явный баг, на уровне стыковки на полной скорости. Да и никак не спасает от редко рандомного перехвата без f, не постоянно же от звезды прыгать. Посмотрел по флагам, тоже не нашел с первого взгляда ничего подходящего.
Гость

Сообщение Гость »

Про условия начала миссий
Миссии не выдаются в первой галактике. Миссии можно выполнить только по одному разу ( ну я по крайней мере не нашел где это скидывается)
Супернова : дается после 32 гиперпереходов через 256, тоесть если вы оказались во второй галактике на 260 гипере то нужно будет еще полетать. Подобное условие для всех миссий
Cloacking Device : дается после 128 гиперов
Захват станции таргонами после 254 гиперов
Я читал ветку на зх где Кладов и народ говорят немного про другое, но в коде так.
Аватара пользователя
GoodBoy
Сообщения: 676
Зарегистрирован: 09 июл 2016, 00:00

Сообщение GoodBoy »

получается миссия даётся после определённого кол-ва перелётов и не-зависит от рейтинга ?
Гость

Сообщение Гость »

GoodBoy писал(а):
и не-зависит от рейтинга ?
Условия только такие, то таргонам там несколько этапов но начало миссий именно такое.
Аватара пользователя
GoodBoy
Сообщения: 676
Зарегистрирован: 09 июл 2016, 00:00

Сообщение GoodBoy »

эта-же команда ещё сделала игрушку hive - улей,
там по-сюжету летаешь типа в туннелях
http://www.worldofspectrum.org/infoseek … id=0002333
наверняка в процедурах тоже много общего

Изображение
Гость

Сообщение Гость »

Как меняется правовой статус.

Правовой статус бывает 3 градаций, им соответствуют значения счетчика
Clean - чистый 0
Offender - правонарушитель 1-#31
Fugitive - беглец #32-#ff
За сбитый корабль дружелюбный корабль на счетчик по OR накладывается значение #40, короче сбив 1 можете мочить всех без разбору, это никак не скажется на дальнейшем ухудшении рейтинга. За покупку или подбор запрещенных грузов штраф суммируется до максимального значения в 255, за каждую тонну:
Slaves и Narcotics по 4
Firearms по 2
Уменьшить значения еще проще. За каждый гиперпереход значение уменьшается в 2 раза, сбив толпу народу и сделав переход вы получите #40/2=#20<#32 то есть всего лишь Offender. Так же счетчик сбрасывается в 0 при галактическом переходе и при использовании спасательной капсулы.
В данный момент я не нашел никаких условий для проверки, ни вайперы ни фер де ленсы не проверяют правовой статус, просто они рандомно могут быть враждебными. Напомню, это касается версии 48к с защитой и аддером. Таким образом в этой версии правовой статус ни на что не влияет.

Так же есть флаг нападения на станцию, о котором я уже писал. При выстреле по станции лазером или ракетой (пуск тоже считается) она для вас закрывается, для ее открытия нужно отлететь на расстояние j двигателя и пролететь на нем хотя бы 1 кадр, это сбросит флаг, ну или сделать гиперпереход.
Аватара пользователя
kalantaj
Сообщения: 2292
Зарегистрирован: 09 июл 2016, 00:00

Сообщение kalantaj »

krt17 писал(а):
для ее открытия нужно отлететь на расстояние j двигателя и пролететь на нем хотя бы 1 кадр,
Кадр это сколько? В чем измеряется? в времени полёта или в чём-то другом?
Гость

Сообщение Гость »

kalantaj писал(а):
Кадр это сколько? В чем измеряется? в времени полёта или в чём-то другом?
Это один рендер кадра, в данном случае значит надо просто нажать j ускорение, расстояние не важно, флаг сбросится. J двигатель активизируется на определенном расстоянии от планеты и солнца, а так же когда на радаре нет кораблей.
Аватара пользователя
GoodBoy
Сообщения: 676
Зарегистрирован: 09 июл 2016, 00:00

Сообщение GoodBoy »

krt17 писал(а):
ни вайперы ни фер де ленсы не проверяют правовой статус, просто они рандомно могут быть враждебными.
а почему тогда в данных для кораблей две кобры ?
(мне говорили что это разные описания - мирная и пиратская)
вспомнил что и питонов - два
" координаты вершин, ребра и плоскости для обоих кораблей хранятся в одной области памяти, а в описаниях мирного корабля и пирата только её адрес"Отредактировано GoodBoy (2016-11-25 20:03:34)
Гость

Сообщение Гость »

GoodBoy писал(а):
а почему тогда в данных для кораблей две кобры ?
Все верно, кобры и питона по 2 штуки, а так же 2 астероида, один база старателей второй просто астероид. Они ссылаются на одни и те же модели, но сами объекты разного типа, в случае с фер де ленсами и вайперами немного по другому. Почему так сделано пока не знаю, в коде очень много мест которые видно писались по заявкам на изменение, вставлялись условия и проверки которые проще было сделать сразу по другому. Видимо подтачивали баланс, добавляли разнообразие. Я не играл в версию без защиты, там все было скомпилено по новому, возможно есть изменения в логике. Но сейчас очень много для меня странных мест, некоторые прям кусками переписывать можно без потери функционала. Сейчас занят куском который выводит сообщения, в процессе набрел, в том числе, на вывод правового статуса решил написать, так как для меня это было не очевидно.
Аватара пользователя
AAA
Сообщения: 38978
Зарегистрирован: 08 июл 2016, 23:04
Откуда: Москва
Контактная информация:

Сообщение AAA »

Гость

Сообщение Гость »

Как работает 3д
У каждой модели есть 3 таблицы
Таблица нормалей
Таблица точек
Таблица ребер
Вычисление и отрисовка идет в 3 шага
1 вычисление видимости граней по нормалям
2 вычисление экранных координат точек
3 отрисовка отрезков
Нормали задают основу для определения видимости ребер, при вычислении нормаль поворачивается через матрицы на текущий угол и проверяется ее знак, направлена от игрока значить связанные с ней ребра не видны.
Таблица точек в добавок к координатам ссылается на 4 нормали если хоть одна из них видна, то точка вычисляется.
При отрисовке граней так же проверяется связанные с каждой гранью 2 нормали если хоть одна видима то отрезок рисуется.

По затратам например при вращении кобры на заставке этапы занимают примерно 90к 200к 80к тактов, это для одного корабля. Очень много чтения через индексные регистры, причем даже для статической матрицы поворота.

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

Сообщение Гость »

Есть альтернативный подход определения видимости.
Вычисляются экранные координаты всех точек
Берем 3 точки в одной плоскости и вычисляем скалярное произведение пары получившихся векторов, оно будет определять видимость. Все параллельные плоскости будут также определены.
Можно разбить точки на значимые для определения видимости и дополнительные нужные только для отрисовки в параллельных плоскостях, избавимся немного от оверхеда, который получили уходом от нормалей. Грани оставить по оригинальному алгоритму. Мне кажется так будет побыстрее и точно избавит от проблем с видимостью. Тут основное по затратам времени получение экранных координат точек, надо смотреть сколько лишних будет при таком подходе и компенсирует ли оно экономию на нормалях.
В любом случае оптимизация реально поможет.
Аватара пользователя
dr.Titus
Сообщения: 929
Зарегистрирован: 08 июл 2016, 00:00

Сообщение dr.Titus »

А если уйти от индексных регистров?
200К - это очень много.
Гость

Сообщение Гость »

dr.Titus писал(а):
А если уйти от индексных регистров?
А если уйти то будет быстрее Изображение Я пока думаю стоит ли возится с нормалями или сразу переделывать.
Аватара пользователя
dr.Titus
Сообщения: 929
Зарегистрирован: 08 июл 2016, 00:00

Сообщение dr.Titus »

krt17 писал(а):
А если уйти то будет быстрее Изображение Я пока думаю стоит ли возится с нормалями или сразу переделывать.
Тебе виднее) Ты познал таинство 3D элиты, тебе и карты в руки)
Аватара пользователя
Hippiman
Сообщения: 152
Зарегистрирован: 10 июл 2016, 00:00

Сообщение Hippiman »

dr.Titus писал(а):
krt17 написал(а):

А если уйти то будет быстрее Изображение Я пока думаю стоит ли возится с нормалями или сразу переделывать.

Тебе виднее) Ты познал таинство 3D элиты, тебе и карты в руки)

Можно ещё Алона, если что спросить. Он в 3d шарит.
Гость

Сообщение Гость »

Hippiman писал(а):
Можно ещё Алона, если что спросить.
Ну если есть что рассказать всегда велком, вроде тема не закрытая. Из меня честно говоря рассказчик не к черту.

Про параллельные я немного конечно непонятно написал, конечно не параллельные, а просто полигоны в той же плоскости. Перспектива же.
Аватара пользователя
Reobne
Сообщения: 18
Зарегистрирован: 09 июл 2016, 00:00

Сообщение Reobne »

krt17, тема замечательная, рассказчик ты неплохой! Много дела, мало мата - значит всё у нас как надо!

На счёт косяка неправильного определения видимости грани. Возможно что баг в коде, но возможно дело в следующем:
Видимость нормали проверяется без учёта перспективы. Есть такие случаи, когда координата Z(условно) нормали отрицательна (вроде бы повёрнута в нашу сторону), но не смотрится именно из точки взгляда.Изображение
На рисунке точка О - откуда глядим, Z направление взгляда, AB - отрезок символизирующий грань. (сечение грани плоскостью рисунка) n - вектор нормали грани.
Гость

Сообщение Гость »

Про перспективу было такое предположение, пока не могу сказать точно. Не настолько идет искажение на заставке. Пока решил не отказываться от нормалей для определения видимости, а потихоньку расписать все матричные преобразования, там одновременно и поворот объекта происходит, и у меня большое подозрение что приведение матрицы поворота делается каждый раз заново, а это дикий оверхед, и тоже самое с точками. В любом случае и для истории пригодится и может какие идеи появятся для оптимизации.
Ответить