Обновил "советы и секреты"

Добавил недокументированый режим сборщика мусора и пару подсказок про доступ к глобальным функциям через точку (наткнулся экспериментально в доках нигде не видел) и уменьшение утечек памяти.
Обновленная статья: http://blitzmax.3dn.ru/publ/3-1-0-8

Про игровые уровни

Написал статью про уровни в играх. В основном про то, как оформлять диалог выбора уровней и типичные ошибки. Но так-же и про то, как используются уровни для других задач игрового дизайна.
Статья тут: http://blitzmax.3dn.ru/publ/pro_igrovye_urovni/3-1-0-20

Blitzmax + Asm

Написал наконец-то статейку про то как прикрутить ассемблерный код к Blitzmax. Ознакомится можно по адресу: http://blitzmax.3dn.ru/publ/3-1-0-17
Статья не раскрывает разных тонкостей, но общая методика в ней показана. Надеюсь, она будет полезной.

Particles

По немногочисленным, но периодическим просьбам коллег выкладываю исходники своей сисчемы частиц с подгрузкой эффектов из скриптов.
Краткие характеристики:
  • загрузка эффектов из скриптов;
  • архитектура: эмиттер > группа > частица;
  • свойства и анимации: вращение, движение с ускорением и без, размеры, анимация цвета и спрайта, жизнь, период анимации, наложение (альфа или световое) и др.;
  • области эмиттера для появления новых частиц: прямоугольник, точка, окружность;
  • эффект следа или "хвоста" (group_trace)
Примеры скриптов прилагаются. В одном из скриптов есть описание синтаксиса.
Естественно, можно делать эффекты из кода в рантайме. В архиве есть пример в "particles.bmx" функция для эффекта взрыва PFX_Explode_1.

Скачать можно тут: http://blitzmax.3dn.ru/load/8-1-0-13

Лицензия: свободно для использования и любых модификаций без уведомления, в любых типах проектов, с обязательным упоминанием автора.

Индексный доступ к элементам строки для записи

Стандартно Blitzmax не позволяет записывать в строку, используя индексный доступ. Но с помощью небольшого трюка это можно забороть.
Вот исходник, показывающий подробно, как это делается:
Local str$ = "Hello"
Print str

Local
p:IntPtr = IntPtr(Varptr(str))
Local
pchar:ShortPtr = ShortPtr(p[0])
pchar :+ 6
'this offset depends on String structure

pchar[0]=
Asc("H")
pchar[1]=
Asc("e")
pchar[2]=
Asc(" ")
pchar[3]=
Asc("h")
pchar[4]=
Asc("e")

Print str
Или вот так в одну строку можно получить указатель на первый символ:
Local pchar:Short Ptr = Short Ptr(Int Ptr(Varptr(str))[0]) + 6
Как видно из примера, мы просто получаем указатель на первый элемент строки во внутренней структуре строкового типа языка.
Ссылка на статью с другими советами: http://blitzmax.3dn.ru/publ/3-1-0-8