Incvisitor
> Серьезно? Пиксельарт эпоха огромных пикселей?
ты в стим давно заглядывал? там игр в пикселе с ранним доступом тысячи по 400р за шт и чем квадратнее и не доделанее игра тем ее лучше покупают) главное наобещать открытый мир и крафт
Mephistopheles
Эвана как...
Panzerschrek[CN]
> Как уровни хранятся? Или они генерируются?
Генерируются, хранятся в виде большого изображения, 16 мегов где-то занимает.
Mephistopheles
> добавляй крафт
Хочу добавить монстров. И чтобы их было много-много. Спрайтовый движок должен осилить толпы.
TarasB
Как освещение делаешь? Как в 8 бит преобразуешь?
TarasB
А можно в окне запустить, али только полноэкран?
Panzerschrek[CN]
Освещение делаю перебором каждого пикселя, добавляю рандом для дизеринга. Потом тупо умножаю покомпонентно.
Палитра трёхмерная (первые 11 цветов служебные, дальше идут 7*7*5=245 цветов палитры):
void InitColorTable () { for ( int i=0; i<11; ++i) colorTable[i] = tbal::COLOR_BLACK; for ( int i=11; i<256; ++i) { const int r = ( i-11)%7; const int g = ( i-11)/7%5; const int b = ( i-11)/35; colorTable[i] = tbal::Color ( r*28+g*8+b*3+37, r*14+g*18+b*13+21, r*6+g*10+b*29+5); } }
За счёт трёхмерности легко переводить из ргб в эту палитру (ну искажается цвет чуток XD):
uint8_t ColorToByte (tbal::Color color) { return uint8_t( 11 + ( color.R( )/37) + 7*( color.G( )/52) + 35*( color.B( )/37)); }
умножение тоже простое:
uint8_t MulLight(uint8_t color, int r, int g, int b) { if ( color>=11) { int cr = ( color-11)%7; int cg = ( color-11)/7%5; int cb = ( color-11)/35; tblib::shrink( r, 256); tblib::shrink( g, 256); tblib::shrink( b, 256); cr = ( cr*r+128)/256; cg = ( cg*g+128)/256; cb = ( cb*b+128)/256; return uint8_t( 11 + cr + 7*cg + 35*cb); } else return color; }
nes
Напиши в командной строке:
Lab2D.exe 640 400 w
TarasB
> Освещение делаю перебором каждого пикселя, добавляю рандом для дизеринга
Может лучше не рандомом, а регулярный сделать dithernig?
11 цветов не освещаются ( прям как в Quake )? А почему именно 11?
Panzerschrek[CN]
Потому что 256-(7*7*5) равно 11. Случайно вышло ровно столько. Регулярный дизеринг - это что, мне хранить ещё матрицу накопленных погрешностей?
TarasB
Крутотень )
Имхо прыг надо сделать с большей задержкой и круто бы нарисовать анимацию приседания перед прыгом )
nes
Я 4-то кадра с трудом нарисовал.
TarasB
А если я замалюю, сделаешь? )
nes
Не, мне всё равно лень это вводить.
А как обнаружение столкновений сделано?
Mephistopheles
По цвету пикселя)
Служебные цвета для этого и нужны.
Короче, для этого есть цвет стены и цвет лестницы. А, ещё для фейковых дырок есть цвет чёрной пустоты, и стены-прозрачной-для-головы.
Короче, движок мегабрутален.