Pull to refresh

Comments 55

Друзья! Уж не знаю, насколько хабраторная статья получилась. Может@dlinyjподскажет, как человек, который ввел это понятие? :)

Исходники будут чуть-чуть попозже. Мой ноут с репозиторием гита перестал видеть хдд и мне удалось все починить как раз к моменту публикации статьи. Линки на загрузки демок рабочие.

Пока что в игре есть парочку нюаносв:

  1. В игре нет нормального таймера. Физический движок не поддерживает переменные дельты для апдейтов, только фиксированные. В полноценных играх реализация таймера разная, но обычно ограничивают кол-во <b>обновлений логики</b>, если оно выше того, чем может выдать железо и "досимулируют" дополнительные кадры логики, если оно ниже желаемого FPS. Чуть позже допилю.

  2. У игры косячные тени - связано это с методикой реализации. Стенсильные тени я сразу же отмел - трансформировать геометрию для них "ручками" будет довольно накладно. На DX9 можно запилить полноценные шедоумапы - я это делал в случае с шутером, но поддерживается только на относительно свежих видеокартах. Поэтому пока что, на время, я реализовал планарные тени - старая техника, которая заключается в трансформировании геометрии специальной матрицей, которая "сплющит" модель в одну из сторон относительно источника света. Такие тени косячные, чуть позже запилю проективные (как в Flatout 2).

Я не ввёл это понятие, я его позаимствовал. Это с тех далёких времён, когда начали говорить что "хабр не тот", потом "тот" трансформировалось в "торт" и таким образом хорошая статья на хабре стала:


Хабра торт

Твоя статья вполне себе хабраторт.

Но вообще, я бы админам хабра рекомендовал бы этот мем использовать в стикерах, картинках. Уж больно устоявшееся выражение. Boomburum рекомендовал бы взять на заметку.

Хаб "Хабр", куда добавляют всё по теме работы сайта, как раз имеет такое описание — "торт или не торт?".

(Скрипучий голос старика, поднимающего указательный палец) С двачей это пошло!

Блин. Мне прискорбно это говорить, но похоже сырцы окончательно утеряны :(

Я перепроверил винты и не нашел бэкапа. Но исходники более ранней версии фреймворка и полуготовой игры на нем (шутан) у меня сохранились. Писалась игра еще до того, как я начал вести техноблог и сделал себе норм сеть для бэкапов!

https://github.com/monobogdan/monofps

Торт. Очень даже торт.

Заменяю никнеймы пользователей гдру на никнеймы Хабра.

Скоро у нас будут кататься Сергей dlinyj, Анатолий Alizar и Бумбурум!

Если машинка Ализара будет жёлтой, то позитивные отзывы гарантированы!

Вот за такие локальные мемы не шарю(

А у меня без шуток девятка первой машиной была ))

А будет Бумер с ТРД?

Скажите, я понимаю, я не канон, но мне хотелось бы увидеть свой первый ~~танк~~ автомобиль Газ 24 Волга. Есть варианты? Там с управлением очень просто - его не было. Она практически не рулила. Любой поворот был на три точки.

Это логически выводимый мем:


Ализари́н (1,2-дигидроксиантрахинон) — органическое соединение, производное антрахинона с химической формулой C14H8O4.… С древности применялся как протравный краситель по ткани.

alizar был пионером потока желтушных публикаций на Хабрахабре.
Знамя из его слабеющих рук подхватила «Информационная служба Хабра» со 100500 сотрудников, а он это вывозил в одну калитку.
Человечище!

Немного оффтоп, визуальный стиль напомнил.

Был такой проект в виде файла bueraki.blend там подобные гонки были целиком сделаны на игровом движке, можно было играть прямо в редакторе. Случайно не ваша разработка?

На бге много приколюх делали конечно

Вот, что я называю: работа - в удовольствие

Неистово плюсую. Люблю сам окунуться в старый добрый DirectX (SharpDX или MonoGame) и руками пощупать всё то, что скрывают от нас Unity3D, UnrealEngine и Godot.

Да, это очень весело)

Когда-то давно, более 8 лет назад, я написал XProger'у еще будучи 13-летним школяром и донималего вопросами о разработке тридэ, с нуля. Очень нравились его демки для eXgine. Будучи школяром, я с ним особо не поладил тогда, но в любом случае благодарен ему за наставление на путь и первые подсказки :)

Сорри за оффтоп, но в такой теме чуть больше шансов найти ответ на давно мучающий вопрос.

Был у меня в своё время пиратский диск Дальнобойщиков, и в довесок к ним прилагалась ещё одна игра - внешне очень похожая на эту демку. Тоже отечественный автопром, но не только ВАЗ. Причём машины были переименованы: "Баржа", "Зубило", "Козёл". Треки - скорее загород, чем город: построек было совсем мало. Год - примерно 1998-2002, скорее ближе к началу этого дипазона.

Может, кто-то помнит такое?

А вид из кабины был?

Не уверен, что воображение не дорисовывает картинку, но вроде бы был. Именно из кабины, с приборами. Сзади-сверху точно был, "от бампера" - не помню совсем.

"Берегись автомобиля", 1998, Amber company.

Да, я тоже о ней сразу подумал)

Думаю это просто в милях в час, а не в километрах.

Мили в час еще быстрее.

А что ж вы всякое разное аки у индуса копипастой вставляете? Вместо

...
for item in vector {
  this.uiUpgrade.AddItem(item.caption, item.handler, item.color)
}
...

у вас всякое

...
this.uiUpgrade.AddItem("Блок цилиндров", (Action) (() => this.currMenu = this.uiUpgrades[0]), this.uiColor);
this.uiUpgrade.AddItem("Топливная система", (Action) (() => this.currMenu = this.uiUpgrades[1]), this.uiColor);
this.uiUpgrade.AddItem("Валы", (Action) (() => this.currMenu = this.uiUpgrades[2]), this.uiColor);
...

и

...
animator.AddSequence(new MeshSequence(), {blabla})
animator.AddSequence(new MeshSequence(), {blabla})
animator.AddSequence(new MeshSequence(), {blabla})
animator.AddSequence(new MeshSequence(), {blabla})
...

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

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

Нужно понимать, что это демка. Здесь ничего не рефакторилось и некоторые места писались так, чтобы получить готовый результат. Но откровенного говнокода там (почти) нет :)

UFO just landed and posted this here

Круто, это же почти готовый автомобильный тренажёр! В автошколах порой даже встречаются "профессиональные" поделки с графикой хуже, чем у автора :)

Короче, надо взять кресло от "жигулей", рулевую колонку, да можно заодно и всю приборку, педали, рычаг КПП, ручник, собрать это всё на стальном каркасе, и обязательно "под капотом" установить старый ПК на 1-ядерном целероне под Windows XP... а датчики воткнуть в игровой порт на материнке.

А шо, потянет норм)))))))

Уххх, кармагедоном потянуло со скринов :)

Спасибо что сделали 32-разрядную сборку, которая запускается на XP.
Если вы пишете в лог, то файл engine.log изначально должен отсутствовать чтобы создать его при запуске.
Хорошо бы чтобы игра выводила сообщение об ошибке в виде MessageBox, а не только в консоль.
Игра завершает работу если не смогла открыть файлы engine.log, Data\scripts\assembly.pdb, Data\scripts\assembly.dll на запись, если запускать без прав администратора. Все файлы, которые ваше приложение будет создавать/писать надо создавать в домашнем каталоге пользователя, в папке Application Data. Создавать их в той же папке, что и игра - привет из 98-года.

Игра кушает 30% проца, что многовато для такой скромной игры. 45 Мб памяти - нормально.
После того как проехали трассу не понятно что нажимать чтобы начать заново.
После закрывания окна:

Unhandled Exception: SharpDX.SharpDXException: HRESULT: [0x80004005], Module: [G
eneral], ApiCode: [E_FAIL/Unspecified error], Message: Неопознанная ошибка

at SharpDX.Result.CheckError()
at SharpDX.Direct3D9.Device.Present(IntPtr sourceRectRef, IntPtr destRectRef,
IntPtr hDestWindowOverride, IntPtr dirtyRegionRef)
at SharpDX.Direct3D9.Device.Present()
at Engine3D.Graphics.EndScene()
at Engine3D.Game.Run()
at MonoRace.Program.Main(String[] args)

Файл engine.log оказался пустой. Вы хотя бы делайте flush после каждой записи или после падения, чтобы в логе что-то оставалось, иначе какой смысл вести лог если в случае падения приложения в него ничего не запишется.

Не хватает еще какой-то надписи что игра загружается и хотя бы простецкого ProgressBar чтобы не показывать пустое окно первые несколько секунд.

Я ре понимаю придирок к тому, что игра хранит все в своем каталоге. Она никуда не устанавьивается и это просто демка. Лог был не закончен

Шутер нормально запускается, но падает через несколько секунд после старта.

Unhandled Exception: System.Reflection.TargetInvocationException: Exception has
been thrown by the target of an invocation. ---> SharpDX.SharpDXException: HRESU
LT: [0x8878001E], Module: [Unknown], ApiCode: [Unknown/Unknown], Message: Unknow
n
at SharpDX.Result.CheckError()
at SharpDX.DirectSound.DirectSoundBase.CreateSoundBuffer(SoundBufferDescripti
on cDSBufferDescRef, IntPtr& dSBufferOut, ComObject unkOuterRef)
at SharpDX.DirectSound.SecondarySoundBuffer..ctor(DirectSound dSound, SoundBu
fferDescription bufferDescription)
at Engine3D.AudioStream.Upload(Int32 sampleRate, Int32 align, Int32 channels,
Byte[] data, Int32 size) in C:\Users\Богдан\source\repos\RPGIGDC\Engine3D\Audio
\Audio.cs:line 95
at Engine3D.AudioStream.LoadWav(Stream strm) in C:\Users\Богдан\source\repos
RPGIGDC\Engine3D\Audio\Audio.cs:line 129
at RPGIGDC.Crawler.Precache() in C:\Users\Богдан\source\repos\RPGIGDC\RPGIGDC
\Monsters\Crawler.cs:line 27
at RPGIGDC.Crawler..ctor(World world) in C:\Users\Богдан\source\repos\RPGIGDC
\RPGIGDC\Monsters\Crawler.cs:line 34
--- End of inner exception stack trace ---
at System.RuntimeMethodHandle._InvokeConstructor(IRuntimeMethodInfo method, O
bject[] args, SignatureStruct& signature, RuntimeType declaringType)
at System.RuntimeMethodHandle.InvokeConstructor(IRuntimeMethodInfo method, Ob
ject[] args, SignatureStruct signature, RuntimeType declaringType)
at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, B
inder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.ConstructorInfo.Invoke(Object[] parameters)
at RPGIGDC.Spawner.Update() in C:\Users\Богдан\source\repos\RPGIGDC\RPGIGDC\S
pawner.cs:line 75
at RPGIGDC.World.Update() in C:\Users\Богдан\source\repos\RPGIGDC\RPGIGDC\Wor
ld\World.cs:line 191
at RPGIGDC.GameMain.OnUpdate() in C:\Users\Богдан\source\repos\RPGIGDC\RPGIGD
C\GameMain.cs:line 70
at Engine3D.Game.Run() in C:\Users\Богдан\source\repos\RPGIGDC\Engine3D\Game.
cs:line 158
at RPGIGDC.Program.Main(String[] args) in C:\Users\Богдан\source\repos\RPGIGD
C\RPGIGDC\Program.cs:line 23

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

Создание вторичнрго звукового буфера фейлится, в архиве все на месте

"тык на GitHub" не кликабельный.

А статья хорошая. :)

Пытался запустить, вылетает почти сразу.

Лол! Ну такой скиллухе я аплодирую стоя))! Браво, маэстро!

Sign up to leave a comment.