Страница 6 из 10

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

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

Добавлено: 20 ноя 2016, 19:45
Гость
Из простого и пиздатого, умножение о котором сказано в факте 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

Вроде в обоих немного переделывал, но совсем по мелочи.

Добавлено: 20 ноя 2016, 19:59
dr.Titus
Это ты для демонстрации привел их, как там делается?
Или это уже какие-то нововведения и убыстрения?

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

Добавлено: 21 ноя 2016, 19:45
Гость
Вопрос к игрокам по перехвату в гипере таргонами. Если вас перехватили и вы всех поубивали, пособирали алиент итемсы возникает патовая ситуация, топливо сожжено, вы на пол пути к цели, звезды нет, планеты нет, то есть все гейм овер? Думаю поправить данный момент, сделать что бы топливо сжигалось пропорционально пройденному расстоянию, но может есть нормальный способ продолжить игру?

Добавлено: 21 ноя 2016, 20:32
GoodBoy
продублировал вопрос там где задротов побольше.

Добавлено: 21 ноя 2016, 20:45
Гость
GoodBoy писал(а):
продублировал вопрос там где задротов побольше.
Спасибо Изображение

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

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

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

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

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

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

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

Добавлено: 21 ноя 2016, 23:16
GoodBoy
получается миссия даётся после определённого кол-ва перелётов и не-зависит от рейтинга ?

Добавлено: 21 ноя 2016, 23:24
Гость
GoodBoy писал(а):
и не-зависит от рейтинга ?
Условия только такие, то таргонам там несколько этапов но начало миссий именно такое.

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

Изображение

Добавлено: 25 ноя 2016, 21:35
Гость
Как меняется правовой статус.

Правовой статус бывает 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 кадр, это сбросит флаг, ну или сделать гиперпереход.

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

Добавлено: 25 ноя 2016, 22:26
Гость
kalantaj писал(а):
Кадр это сколько? В чем измеряется? в времени полёта или в чём-то другом?
Это один рендер кадра, в данном случае значит надо просто нажать j ускорение, расстояние не важно, флаг сбросится. J двигатель активизируется на определенном расстоянии от планеты и солнца, а так же когда на радаре нет кораблей.

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

Добавлено: 25 ноя 2016, 22:57
Гость
GoodBoy писал(а):
а почему тогда в данных для кораблей две кобры ?
Все верно, кобры и питона по 2 штуки, а так же 2 астероида, один база старателей второй просто астероид. Они ссылаются на одни и те же модели, но сами объекты разного типа, в случае с фер де ленсами и вайперами немного по другому. Почему так сделано пока не знаю, в коде очень много мест которые видно писались по заявкам на изменение, вставлялись условия и проверки которые проще было сделать сразу по другому. Видимо подтачивали баланс, добавляли разнообразие. Я не играл в версию без защиты, там все было скомпилено по новому, возможно есть изменения в логике. Но сейчас очень много для меня странных мест, некоторые прям кусками переписывать можно без потери функционала. Сейчас занят куском который выводит сообщения, в процессе набрел, в том числе, на вывод правового статуса решил написать, так как для меня это было не очевидно.

Добавлено: 28 ноя 2016, 14:32
AAA

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

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

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

Добавлено: 02 дек 2016, 21:41
Гость
Есть альтернативный подход определения видимости.
Вычисляются экранные координаты всех точек
Берем 3 точки в одной плоскости и вычисляем скалярное произведение пары получившихся векторов, оно будет определять видимость. Все параллельные плоскости будут также определены.
Можно разбить точки на значимые для определения видимости и дополнительные нужные только для отрисовки в параллельных плоскостях, избавимся немного от оверхеда, который получили уходом от нормалей. Грани оставить по оригинальному алгоритму. Мне кажется так будет побыстрее и точно избавит от проблем с видимостью. Тут основное по затратам времени получение экранных координат точек, надо смотреть сколько лишних будет при таком подходе и компенсирует ли оно экономию на нормалях.
В любом случае оптимизация реально поможет.

Добавлено: 02 дек 2016, 23:09
dr.Titus
А если уйти от индексных регистров?
200К - это очень много.

Добавлено: 02 дек 2016, 23:20
Гость
dr.Titus писал(а):
А если уйти от индексных регистров?
А если уйти то будет быстрее Изображение Я пока думаю стоит ли возится с нормалями или сразу переделывать.

Добавлено: 02 дек 2016, 23:29
dr.Titus
krt17 писал(а):
А если уйти то будет быстрее Изображение Я пока думаю стоит ли возится с нормалями или сразу переделывать.
Тебе виднее) Ты познал таинство 3D элиты, тебе и карты в руки)

Добавлено: 03 дек 2016, 01:58
Hippiman
dr.Titus писал(а):
krt17 написал(а):

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

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

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

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

Про параллельные я немного конечно непонятно написал, конечно не параллельные, а просто полигоны в той же плоскости. Перспектива же.

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

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

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