crypt of decay - Awish again [entries|archive|friends|userinfo]
ketmar

[ userinfo | ljr userinfo ]
[ archive | journal archive ]

Awish again [Mar. 17th, 2012|09:29 am]
Previous Entry Add to Memories Tell A Friend Next Entry
[Tags|]

в гите много интересного, хоть и ненужного. в частности, динамическая подгрузка скриптов для комнат, например. фактически, формат кодофайла — это объектник с фиксапами, списком меток и прочим, а загрузчик одновременно является и линкером. в самом коде игры, правда, не предусмотрены хуки, но зато есть команды для хотпатчинга кода. учитывая, что линкер позволяет объявлять внешней любую глобальную метку, особые извращенцы могут поразвлекаться в хардкорном стиле. конечно, при (пере)загрузке уровня вызывается callback, который позволяет убрать все хотпатчи.

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

ну, и ответ на незаданый вопрос: потому что это весело. и, кстати: 64 килобайта хватит всем. а ещё это прикольный движок потенциально расширяемого платформера. и нет, какой-либо компилятор для этой VM не планируется (обычно такое заявление значит, что я его всенепременно напишу).
Linkmeow!

Comments:
[User Picture]
From:[info]steinkrauz
Date:March 17th, 2012 - 11:59 am
(Link)
Блеать...
Планы по выходу сегодня из дому на улицу можно благополучно хоронить.
[User Picture]
From:[info]ketmar
Date:March 17th, 2012 - 12:12 pm
(Link)
why? %-)

p.s. сейчас активно ебошится версия, где весь механизм загрузки уровней тоже перенесен в виртуальную машину (и заодно снято ограничение на размер уровня). i am alpha and i am omega. также добавляется фича динамической подгрузки спрайтов в разные банки. all praise hypnotoad. движок всё больше становится похож на универсальный конструктор неведомой ёбаной хуйни.

бугогашечка, добавив ещё несколько системных вызовов, на этом же движке можно будет заебошить и редактор уровней.
[User Picture]
From:[info]steinkrauz
Date:March 17th, 2012 - 12:37 pm
(Link)
Because it's hard to tear off myself from groking the sources.

Кстати, тупой вопрос: занафига заворачивать тела макросов в do{}while(0)?

I am Alpha and Omega, actually, if you were to quote Rev 1,8.

А ведь с динамической подгрузкой на этом движке можно будет строить не только банальные ходилки, но и что-то поприкольнее, типа The Incredible Machine.

[User Picture]
From:[info]ketmar
Date:March 17th, 2012 - 12:44 pm
(Link)
>занафига заворачивать тела макросов в do{}while(0)?
чтобы точка с запятой не создавала проблем, например, вот в таком:
if (…) MACRO(…); else …;
к тому же внутри тела удобно объявлять «локальные переменные макроса», минихак. у меня периодически то любовь к подобному оформлению макро, то ненависть.

да, процитировал криво, но тут нет редактирования постов, блин. не проснумшись ещё толком.

>А ведь с динамической подгрузкой на этом движке можно будет строить не только
>банальные ходилки, но и что-то поприкольнее, типа The Incredible Machine.

it's a Plan! вообще-то Awish — это как раз обкатка движка VM и связок. главная идея — как минимум наебошить универсальный движок для платформеров. возможно, я ещё притащу туда полигональную рисовалку из Another World. и, скорее всего, расширю движок до работы с плавающими числами (возможно, опционально, при помощи опций компиляции), плюс уберу ограничение на 64 кб (оно и так чисто искусственное).

а если приделать ещё и микрокомпилятор (да простейший subset сей, например, однопроходный и тупой, как пень) — это даже станет юзабельным для тех, кто cannot into assembler.
[User Picture]
From:[info]steinkrauz
Date:March 17th, 2012 - 01:19 pm
(Link)
>к тому же внутри тела удобно объявлять «локальные переменные макроса»,
точно.
Всё время забываю, что у тебя C99.
Сраный M$ лишил меня этой прелести.

>расширю движок до работы с плавающими числами
Это не кошерно. Плюс придёлся отельный стек для плавающих городить.
ИМХО, интереснее будет запилить арифметику с фиксированной точкой.
Ну и в духе времени получится. (ЕМНИП, даже в Думе ещё фиксы были).

>это даже станет юзабельным для тех, кто cannot into assembler.
и сделать lisp-подобный синтаксис, чтобы не расслаблялись.
[User Picture]
From:[info]ketmar
Date:March 17th, 2012 - 01:33 pm
(Link)
>Сраный M$ лишил меня этой прелести.
не совсем. там тоже можно, но не где попало, а только после фигурной скобки. а вот что в C99 приятно — это упёртое из c++ for (int f = …).

>Плюс придёлся отельный стек для плавающих городить.
неа, просто выкинуть целые. вариант такой: или всё на целых, или всё на даблах.

хотя, в принципе, ты прав: баловство это. всегда можно сделать длинную арифметику ручками на том же асме: хардкор, в конце концов, или так, погулять вышли?! и так я форы дал с командами mul, div и mod, совсем халява.

>ЕМНИП, даже в Думе ещё фиксы был
дык не от хорошей жизни же. %-)

>и сделать lisp-подобный синтаксис, чтобы не расслаблялись.
это неинтересно, я тогда мог просто взять уже написаную мной схему и не трахаться. впрочем, до компилятора ещё далеко: мне он не нужен (ну бля, я асм пилил для того, чтобы на нём писать, а не чтобы компилятор делать), а больше никто всё равно не напишет.
[User Picture]
From:[info]ketmar
Date:March 17th, 2012 - 03:15 pm
(Link)
баста, карапузики. загрузчик уровней утащен в виртуальную машину.
[User Picture]
From:[info]steinkrauz
Date:March 17th, 2012 - 03:46 pm
(Link)
И сотня строк всё удовольствие.
Я думал выйдет хуже.
[User Picture]
From:[info]ketmar
Date:March 17th, 2012 - 04:05 pm
(Link)
дык формат уровня-то простой. взял сишный лоадер да перевёл тупо в ассемблер. пришлось апей добавить, правда, но то мелочи. вон, после удивления анонимуса ещё и буфер задницы привинтил, потребление проца упало процентов на 10.

алсо, теперь мы имеем такое удовольствие, как «кастомные лоадеры», гыг. можно извращаться от чтения уровней в хитрых форматах до процедурной генерации. забавно.
[User Picture]
From:[info]steinkrauz
Date:March 17th, 2012 - 04:27 pm
(Link)
Да оно и так не много потребляло. Сейчас глянул -- 7%-8%, в пике до 10%
У анончега видимо совсем как-то древний комп. Или нетбук какой.

>до процедурной генерации. забавно.
Дайож платформенный Диабло, ага.
[User Picture]
From:[info]ketmar
Date:March 17th, 2012 - 04:29 pm
(Link)
ну, у меня до 18 процентов. от 12 до 18 только так. а сейчас три-шесть. ну, я знал, в принципе, что там весьма узкое место, не в первый раз натыкаюсь.

>Дайож платформенный Диабло, ага.
Spelunky.
[User Picture]
From:[info]ketmar
Date:March 17th, 2012 - 04:33 pm
(Link)
кстати, если я верно идентифицировал анона, то техника там весьма неслабая.
[User Picture]
From:[info]ketmar
Date:March 17th, 2012 - 04:08 pm
(Link)
кстати, забавно: в оригинальной паскалевской программе, похоже, массивы уровней с единицы индексируются по иксу, а не с нуля. и с единицы по игреку, потому что по всей игре игрек-координата — это кирпич под объектом. но второе оказалось очень удобно, кстати: избавило от постоянных прибавлений/вычитаний единички.
[User Picture]
From:[info]steinkrauz
Date:March 17th, 2012 - 04:30 pm
(Link)
Так это отродясь различие насильников и пасквилянтов: в С массивы zero-based, в Паскале, вообще говоря, кастомные, но по житейской привычке чаще всего с 1 начинают.
[User Picture]
From:[info]ketmar
Date:March 17th, 2012 - 04:32 pm
(Link)
нихера, я больше десяти лет исключительно на паскале писал, но массивы всегда с нуля начинал. %-)
[User Picture]
From:[info]steinkrauz
Date:March 17th, 2012 - 04:34 pm
(Link)
Значит, у тебя это в ПЗУ ДНК прошито
[User Picture]
From:[info]ketmar
Date:March 17th, 2012 - 04:40 pm
(Link)
это печальное наследие программирования в машинном коде для КР580ИК80.

p.s. апдейтнул оригинальный пост ссылкой на новую виндовую сборку. заодно вложил в неё вссемблер и ассемблерные исходники. можешь скачать новьё.
[User Picture]
From:[info]ketmar
Date:March 17th, 2012 - 04:43 pm
(Link)
да, фича save/load фатально поломана. don't even try to.
From:(Anonymous)
Date:March 18th, 2012 - 05:29 pm
(Link)
> чтобы точка с запятой не создавала проблем, например, вот в таком:
> if (…) MACRO(…); else …;

я, конечно, кода не видел, но что может быть не так с ';' без do/while?
в do{}while(0) обычно заворчивают код, часть которого можно потом красиво поскипать через break при определенном условии, не прибегая к некошерным goto и прожорливым throw.
[User Picture]
From:[info]ketmar
Date:March 18th, 2012 - 06:33 pm
(Link)
#define MAC(n) if (n) doshit();

if (a) MAC(42); else MAC(666);
From:(Anonymous)
Date:March 18th, 2012 - 07:09 pm
(Link)
угу, точно
[User Picture]
From:[info]ketmar
Date:March 17th, 2012 - 12:48 pm
(Link)
кстати, ещё один плюс (на который мне плевать, но) подхода с VM — неебическая портируемость. SDL нет разве что на кофемолке (и то не факт), да и не столь сложно переписать блиттеры на другом API. а остальное переносится as-is. а в самой логике игры вообще ни байта менять не надо. при этом сейвы, демки, уровни — автомагически одинаковы для всех платформ.

но я вредный, я специально это всё покрыл GPLv3.