Maginficat!

Обещал же себе… не лезь в оптимизацию, козлёнком станешь, сделай чтобы заработало, а потом возись сколько душе угодно. Нет, таки провозился все выходные по принципу “всё и сразу”.

Мотивация к работе не перестаёт радовать – 40% пятница, 80% суббота, 80% воскресенье. Итого, за выходные – почти 10 тысяч строк кода, судя по отчёту GitHub-а (впрочем, похоже, он “зацепил” в статистике не только файлы с программой, а и карты тайлов, так что цифра существенно завышена :))…

Новый генератор карт работает приблизительно в 100 (!) раз быстрее, чем прошлый вариант (200 миллисекунд на генерацию карты 25х25х9 вместо 20 секунд в старом алгоритме). А ранее вообще не решаемые задачи теперь решаются мгновенно (9х9х9 – старый алгоритм сдался после 400 секунд так и не “забравшись” ниже 6го этажа, новый генерирует все 9 этажей за около 50 миллисекунд). Если мне удастся таким же образом оптимизировать рейкастинг (а наклёвки есть), то, возможно, даже потоковая генерация окажется не особо актуальной…

Осталось несколько часов, чтобы всё подчистить, настроить и окончательно вставить в игру.

Ещё одним важным шагом генерации будут связанные области (для создания дверей и окон, сюжетных “узких точек”). Но это чуть позже.

Не так хорошо складывается связь карты со сценарием, как мне хотелось бы. Всё ещё слишком много непонятных моментов: что и как добавлять, чтобы получать триггеры с карты было удобно как при генерации так и при самой игре. А триггеры ведь могут цепляться не только к конкретному тайлу, но и к элементу тайла (например, переключатель) и к некоторой области карты (например, токсичная область подземелья). Некоторые тайлы, несущие триггер, могут быть определены в процессе генерации. Короче, сложностей достаточно. Но всё по порядку.

How many times I’ve promised myself not to get into optimization now… Just make it work and then optimize to heart’s content. No. I’ve still wanted to do “everything at once”.

Still enjoying miracles of motivation – 40% Friday, 80% Saturday, 80% Sunday. Those were almost 10 thousands lines of code for the weekends according to GitHub report  (However it seems that tile maps were also counted, so this number is overestimated :))…

Eventually map generator is working approximately 100 (!) times faster than the previous implementation (200 milliseconds to generate a 25х25х9 map comparing to 20 seconds of the old algorithm). And previously unsolvable tasks are solved in fractions of a second (9х9х9 map – the old algorithm gave up after 400 seconds of trying and couldn’t reach below 6th floor, a new one produced a valid 9-level map in approx. 50 milliseconds). If I’ll be capable of optimizing the raycasting to a similar extent (and it looks possible) I’ll doubt usefulness of threaded generation 🙂

However, I need several more hours to clean it up and launch in-game.

One more important generation modification is linked areas algorithm (to create doors and windows, plot-related bottle-necks). But I’ll address it a bit later.

I still have difficulties with linking the map to scenario triggers. There are several problems to add them in such a way that it would be convenient to work with triggers both during the map generation and during the gameplay. While the triggers can attach to a tile (e.g. entrance-exit triggers), to tile element (e.g. a switch) or to some map area (e.g. a toxic area of the dungeon). Some tiles carrying triggers can have undefined location at generation start. Well… there’re lots of difficulties. But let’s address them sequentially.
2017-03-26-224429_1366x768_scrot.png

Advertisements
Maginficat!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s