WIP: Tachka

Pixilang по русски
User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

WIP: Tachka v0.4

Post by Al_Rado »

А вот и новый релиз :) Теперь можно сказать, что основа игрового движка готова: реализована карта взаимодействия спрайта и окружающей среды попиксельно, т.е. спрайты можно загружать любые - они будут "биться" о препятствия четко по контуру; типов взаимодействия с картой может быть сколько душе угодно - для этого необходимо назначить этому типу определенный цвет, нанести его на карту "логики" и прописать взаимодействие :)
Еще из изменений - поворот работает теперь только во время движения (что на мой взгляд более логично), спрайт движется с разумной скоростью =)

//Al_Rado// Tachka v0.4 // Файл с данными тут http://slil.ru/25321183
resize_pixi (0,320,240)
set_disk0 ("data.tar")
fon = load_pixi("0:/fon.gif") // карта "логики" ("непроходимый" рельеф, масляные пятна, грязь и т.п) , отрисована определенными цветами, разрешение в 2 раза меньше отображаемой карты
fon_real = load_pixi("0:/fon_real.gif") // рисованый фон, который будет отображаться
P = 16 x=-30*P y=-30*P z=5 w=150 a=0 sign=1
car = load_pixi("0:/jeep.gif")
x_car = get_pixi_xsize(car)
y_car = get_pixi_ysize(car)
n=0 n2=0 m=0
x_scr = get_window_xsize
y_scr = get_window_ysize

zvuk = new_array( 8 )
zvuk[ 0 ] = 1
zvuk[ 1 ] = 6000
zvuk[ 2 ] = 2000
zvuk[ 3 ] = 4000
zvuk[ 4 ] = 1
zvuk[ 5 ] = 6000
zvuk[ 6 ] = 2000
zvuk[ 7 ] = 4000

unu:
pixi( fon, 0, 0, 2 )
OPROS_FON
clear (SNEG)
handle_hard_keys({OPROS},{})
pixi( fon_real, 0, 0, 1 )
fpixi(car,x/P,y/P,1,1,z)
y=y + yp
x=x + xp
sound_volume (w)
send_sound( zvuk , 400, 1, 1 )
frame (30)
goto unu

OPROS:
if ghk = 264 {w=w+25 a=a+1 sign=1 if a>4 {a=4 w=250} } // повышение передачи
if ghk = 265 {w=w-25 a=a-1 if a<1 {a=1 sign=-1 w=50} } // понижение передачи + задний ход
if ghk = 266 & a!=0 { z=z-1 } // поворот налево, если едем
if ghk = 267 & a!=0 { z=z+1 } // поворот направо, если едем
xp=((cos(z*16))/32) * a * sign
yp=((sin(z*16))/32) * a * sign
ret

OPROS_FON:
if z < 0 {z = 31}
if z > 31 {z = 0}
if w > 250 {w=250}
if w < 50 {w=50}
m=0 while(m < y_car)
{
n=0 while(n < x_car)
{
zzz=x_car*y_car*z+n2
if car[zzz] != 0
{
x_opr = x/P-x_car/2+n
y_opr = y/P-y_car/2+m
color_fon = get_dot (x_opr,y_opr)
stop_blue
zanos_green
medl_red
otskok_white
}
n+1 n2+1
}
m+1
}
n2=0
ret

stop_blue: // останавливаемся, если наезжаем на синий цвет
if color_fon = BLUE {xp=0 yp=0 a=0 w=100}
ret

zanos_green: // заносит, если наезжаем на зеленый цвет, типа масляное пятно
if color_fon = GREEN {z=(sin(get_timer(0)/4)/2+128)/64 w=250}
ret

medl_red: // не можем разогнаться, если наезжаем на красный цвет, типа грязь
if color_fon = RED {xp=((cos(z*16))/32)*a/2*sign yp=((sin(z*16))/32)*a/2*sign}
ret

otskok_white: // отскакиваем, если наезжаем на белый цвет
if color_fon = WHITE {xp=(cos(z*16)/32)*(-sign) yp=(sin(z*16)/32)*(-sign) a=0}
ret


Если кому интересно, вот тестовая версия =)

//Al_Rado// Tachka v0.4 test//
resize_pixi (0,320,240)
set_disk0 ("data.tar")
fon = load_pixi("0:/fon.gif") // карта "логики" ("непроходимый" рельеф, масляные пятна, грязь и т.п) , отрисована определенными цветами, разрешение в 2 раза меньше отображаемой карты
fon_real = load_pixi("0:/fon_real.gif") // рисованый фон, который будет отображаться
P = 16 x=-30*P y=-30*P z=5 w=150 a=0 sign=1
car = load_pixi("0:/jeep.gif")
//car = load_pixi("0:/SLIX_F1.gif") // раскомментить для проверки работы c другими спрайтами авто
x_car = get_pixi_xsize(car)
y_car = get_pixi_ysize(car)
n=0 n2=0 m=0
x_scr = get_window_xsize
y_scr = get_window_ysize

zvuk = new_array( 8 )
zvuk[ 0 ] = 1
zvuk[ 1 ] = 6000
zvuk[ 2 ] = 2000
zvuk[ 3 ] = 4000
zvuk[ 4 ] = 1
zvuk[ 5 ] = 6000
zvuk[ 6 ] = 2000
zvuk[ 7 ] = 4000

unu:
pixi( fon, 0, 0, 2 )
OPROS_FON
//clear (SNEG)// 1) закомментить для теста

handle_hard_keys({OPROS},{})
//pixi( fon_real, 0, 0, 1 ) // 2) закомментить для теста
fpixi(car,x/P,y/P,1,1,z)
y=y + yp
x=x + xp
sound_volume (w)
send_sound( zvuk , 400, 1, 1 )
frame (30)
clear (SNEG) // 3) закомментить для "финального" вида
goto unu

OPROS:
if ghk = 264 {w=w+25 a=a+1 sign=1 if a>4 {a=4 w=250} } // повышение передачи
if ghk = 265 {w=w-25 a=a-1 if a<1 {a=1 sign=-1 w=50} } // понижение передачи + задний ход
if ghk = 266 & a!=0 { z=z-1 } // поворот налево, если едем
if ghk = 267 & a!=0 { z=z+1 } // поворот направо, если едем

xp=((cos(z*16))/32) * a * sign
yp=((sin(z*16))/32) * a * sign
ret

OPROS_FON:
if z < 0 {z = 31}
if z > 31 {z = 0}
if w > 250 {w=250}
if w < 50 {w=50}
m=0 while(m < y_car)
{
n=0 while(n < x_car)
{
zzz=x_car*y_car*z+n2
if car[zzz] != 0
{
x_opr = x/P-x_car/2+n
y_opr = y/P-y_car/2+m
dot (x_opr+30 ,y_opr+30, SNEG ) // для наглядности, отрисовываю "контур" авто (правее и ниже) - внутри его считывается карта "логики"
color_fon = (get_dot (x_opr,y_opr))
stop_blue
zanos_green
medl_red
otskok_white
}
n+1 n2+1
}
m+1
}
n2=0
ret

stop_blue: // останавливаемся, если наезжаем на синий цвет
if color_fon = BLUE {xp=0 yp=0 a=0 w=100}
ret

zanos_green: // заносит, если наезжаем на зеленый цвет, типа масляное пятно
if color_fon = GREEN {z=(sin(get_timer(0)/4)/2+128)/64 w=250}
ret

medl_red: // не можем разогнаться, если наезжаем на красный цвет, типа грязь
if color_fon = RED {xp=((cos(z*16))/32)*a/2*sign yp=((sin(z*16))/32)*a/2*sign}
ret

otskok_white: // отскакиваем, если наезжаем на белый цвет
if color_fon = WHITE {xp=(cos(z*16)/32)*(-sign) yp=(sin(z*16)/32)*(-sign) a=0}
ret
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!
User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

WIP: Tachka v0.5

Post by Al_Rado »

//Al_Rado// Tachka v0.5 // Файл с данными тут http://slil.ru/25346878
//Изменения: добавлен новый фон - то что должно отображаться поверх спрайта (эффект объема при заезде за препятствие ), отрисовка тени авто программно (используется тот же спрайт), переделано управление - при движении назад руль нужно выкручивать в другую сторону, переделаны взаимодействия с препятствиями (при застревании авто - двигаться вперед/назад выкручивая руль), добавлены звуковые эффекты (качество которых еще предстоит дорабатывать)
resize_pixi (0,320,240)
set_disk0 ("Tach_data.tar")
fon = load_pixi("0:/fon.gif") // карта "логики"
fon_real = load_pixi("0:/fon_real.gif") // фон, который будет отображаться "СНИЗУ"
fon_real2 = load_pixi("0:/fon_real2.gif") // фон, который будет отображаться "СВЕРХУ"
P = 16 x=-30*P y=-30*P z=5 w=100 a=0 sign=1
car = load_pixi("0:/jeep.gif")
x_car = get_pixi_xsize(car)
y_car = get_pixi_ysize(car)
n=0 n2=0 m=0
x_scr = get_window_xsize
y_scr = get_window_ysize
start_timer( 0 )

B=#FFFFFF
motor_zvuk = "
BBBB
"
make_pixi (motor_zvuk)

B=#FFFFFF
gaz_zvuk1 = "
B..............

BB.............

BBBB...........

BBBBBB.........

BBBBBBBBBBB....

BBBBBBBBBBBBBBB
"
make_pixi (gaz_zvuk1)

B=#FFFFFF
gaz_zvuk2 = "
BBBBBB
BBB...
B.....
"
make_pixi (gaz_zvuk2)

B=#FFFFFF
bum_zvuk1 = "
B.B.B.B.B

.B.B.B.B.

B.B.B.B.B

.B.B.B.B.
"
make_pixi (bum_zvuk1)

B=#000000
bum_zvuk2 = "
B.B.B.B.B

.B.B.B.B.

B.B.B.B.B

.B.B.B.B.

B.B.B.B.B

.B.B.B.B.

B.B.B.B.B

.B.B.B.B.
"
make_pixi (bum_zvuk2)

B=FFFFFF
vizg_zvuk1 = "
B........

.B.......

B........

.....B...

B........

.B.......

B........

.B.B.B.B.
"
make_pixi (vizg_zvuk1)

B=#FFFFFF
graz_zvuk = "
B.B.B.B
"
make_pixi (graz_zvuk)

////////////////////////

unu:
clear
pixi( fon, 0, 0 )
OPROS_FON
clear
handle_hard_keys({OPROS},{})
y=y + yp
x=x + xp
pixi( fon_real, 0, 0, 1 )
print ("Тачка v.05",-140,-100,SNEG)
transp (64)
pixel_shader( { PS_R = BLACK } )
fpixi(car,x/P-2,y/P-2,1,1,z)
pixel_shader( -1 )
transp (256)
fpixi(car,x/P,y/P,1,1,z)
pixi( fon_real2, 0, 0, 1 )
sound_volume (w)
MOTOR
frame (30)
goto unu

OPROS:
if ghk = 264 {GAZ_1 zadnij=0 w=w+25 a=a+1 sign=1 if a>4 {a=4 w=250}} // повышение передачи
if ghk = 265 {GAZ_2 zadnij=1 w=w-25 a=a-1 if a<0 {sign=1 a=-1 w=100}} // понижение передачи + задний ход
if ghk = 266 & a!=0 & sign>0 { z=z-1 } // выкручиваем руль влево, если едем вперед
if ghk = 267 & a!=0 & sign>0 { z=z+1 } // выкручиваем руль вправо, если едем вперед
if ghk = 266 & a!=0 & sign<0 { z=z+1 } // выкручиваем руль вправо, если едем назад
if ghk = 267 & a!=0 & sign<0 { z=z-1 } // выкручиваем руль влево, если едем назад
if z < 0 {z = 31}
if z > 31 {z = 0}
if z > 31 {z = 0}
if z < 0 {z = 31}
xp=((cos(z*16))/32) * a * sign // вычисляем прирощение по оси X
yp=((sin(z*16))/32) * a * sign // вычисляем прирощение по оси Y
ret

OPROS_FON:
if w > 250 {w=250}
if w < 50 {w=50}
m=0 while(m < y_car)
{
n=0 while(n < x_car)
{
zzz=x_car*y_car*z+n2
if car[zzz] != 0
{
x_opr = x/P-x_car/2+n
y_opr = y/P-y_car/2+m
color_fon = get_dot (x_opr,y_opr)
stop_blue
zanos_green
medl_red
otskok_white
}
n+1 n2+1
}
m+1
}
n2=0
ret

stop_blue: // останавливаемся, если наезжаем на синий цвет
if color_fon = BLUE {a=0 y=y-yp*2 x=x-xp*2 yp=0 xp=0
send_sound( bum_zvuk1 , 1000, 1, 0 ) }
ret

zanos_green: // заносит, если наезжаем на зеленый цвет, типа масляное пятно
if color_fon = GREEN {z=z-(sin(get_timer(0)/8)/2+128)/128 send_sound( vizg_zvuk1 , 4400, 2, 0) if z<0 | z>31 {z=0}}
ret

medl_red: // не можем разогнаться, если наезжаем на красный цвет, типа грязь
if color_fon = RED {xp=((cos(z*16))/32)*a/4*sign yp=((sin(z*16))/32)*a/4*sign send_sound( graz_zvuk , 400, 1, 0 )}
ret

otskok_white: // отскакиваем, если наезжаем на белый цвет
if color_fon = WHITE {
if zadnij=0 {xp=-((cos(z*16))/32) yp=-((sin(z*16))/32)}
if zadnij=1 {xp=((cos(z*16))/32) yp=((sin(z*16))/32)}
a=0 w=50 send_sound( bum_zvuk2 , 4000, 1, 0 )
}
ret

MOTOR:
send_sound( motor_zvuk , 400, 1, 0 )
ret

GAZ_1:
send_sound( gaz_zvuk1 , 2000, 2, 0 )
ret

GAZ_2:
send_sound( gaz_zvuk2 , 4000, 1, 0 )
ret
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!
User avatar
NightRadio
Site Admin
Posts: 3941
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

Re: WIP: Tachka

Post by NightRadio »

Отлично! :) Скоро уже готовая игрушка получится
User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

WIP: Tachka v.06

Post by Al_Rado »

//Al_Rado// Tachka v0.6 (23.01.2008)// Реализованы: главное меню, пауза, хелп, выход из игры по "Esc"
//Все тут (включая сам интерпретатор) http://slil.ru/25389000

/////Загрузка данных/////
set_disk0 ("Tach_data.tar")
fon = load_pixi("0:/fon.gif") // карта "логики"
fon_real = load_pixi("0:/fon_real.gif") // фон, который будет отображаться "СНИЗУ"
fon_real2 = load_pixi("0:/fon_real2.gif") // фон, который будет отображаться "СВЕРХУ"
car = load_pixi("0:/jeep.gif")
menu_1 = load_pixi("0:/menu_1.jpg")

/////Звуки/////
SOUNDS

/////Переменные/////
VAR_NULO

/////Начальное меню/////
MAIN_MENU

/////***Главный цикл***/////
resize_pixi (0,x_window,y_window)

unu:
noesc(1)

FON_LOGICA // отрисовываем фон "логики"

handle_hard_keys({OPROS_KEY},{}) // опрашиваем клавиши, узнаем прирост по осям X и Y

x=x + xp // добавляем прирост по оси X
y=y + yp // добавляем прирост по оси Y

FON_DOWN // отрисовываем фон по которому можно ездить

DRAW_CAR // отрисовываем авто и "сопутствующие вещи"

PRINT_INFO // пишем информацию

FON_UP // отрисовываем фон за (под) который можно заезжать

sound_volume (w) // громкость
send_sound( motor_zvuk , 400, 1, 0 ) // шум мотора

frame (30)

if make_pause=1 { goto PAUSE }
if make_help=1 { goto HELP }
if make_menu=1 { goto ESCAPE }

goto unu
//////////***********//////////


/////Подпрограммы/////

VAR_NULO: // начальные значения переменных
P = 16 x=-30*P y=-30*P z=5 w=100 a=0 sign=1 zadnij=0
x_car = get_pixi_xsize(car)
y_car = get_pixi_ysize(car)
n=0 n2=0 m=0
x_scr = get_window_xsize
y_scr = get_window_ysize
start_timer( 0 )
scr0 = 0
img = new_pixi( 40, 8, 1 )
pixi_transp( img, 0 )
x_window = 320
y_window = 240
lin=1
xp=0
yp=0
ret

FON_LOGICA: // отрисовываем фон "логики"
transp( 256 )
clear
pixi( fon, 0, 0 )
OPROS_FON // проверяем взаимодействия авто и фона
clear
ret

FON_DOWN: // отрисовываем фон по которому можно ездить
pixi( fon_real, 0, 0, 1 )
ret

FON_UP: // отрисовываем фон за (под) который можно заезжать
pixi( fon_real2, 0, 0, 1 )
ret

DRAW_CAR: // отрисовываем авто и "сопутствующие вещи"
transp (64)
pixel_shader( { PS_R = BLACK } )
fpixi(car,x/P-2,y/P-2,1,1,z) // отрисовываем тень авто
pixel_shader( -1 )
transp (256)
fpixi(car,x/P,y/P,1,1,z) // отрисовываем авто
ret

PRINT_INFO: // пишем информацию
t = get_timer( 0 )
print ("ТАЧКА v.06",-140,-100,SNEG)
effector( BLACK, 3, 1, -142, -102, 82, 12, 1)
effector( BLACK, 3, 2, -142, -102, 82, 12, 1)
pixel_shader( PIXEL_SHADER_3 )
print ("ТАЧКА v.06",-140,-100,SNEG)
pixel_shader( -1 )
ret

OPROS_KEY: // подпрограмма опроса клавиш
if ghk = 32 { make_pause=1 }
if ghk = 104 { make_help=1 }
if ghk = 27 { make_menu=1 }
if ghk = 264 {send_sound( gaz_zvuk1 , 2000, 2, 0 ) zadnij=0 w=w+25 a=a+1 sign=1 if a>4 {a=4 w=250}} // повышение передачи
if ghk = 265 {send_sound( gaz_zvuk2 , 4000, 1, 0 ) zadnij=1 w=w-25 a=a-1 if a<0 {sign=1 a=-1 w=100}} // понижение передачи + задний ход
if ghk = 266 & a!=0 & sign>0 { z=z-1 } // выкручиваем руль влево, если едем вперед
if ghk = 267 & a!=0 & sign>0 { z=z+1 } // выкручиваем руль вправо, если едем вперед
if ghk = 266 & a!=0 & sign<0 { z=z+1 } // выкручиваем руль вправо, если едем назад
if ghk = 267 & a!=0 & sign<0 { z=z-1 } // выкручиваем руль влево, если едем назад
if z < 0 {z = 31} if z > 31 {z = 0} // ограничиваем кадры спрайта авто (они же угол поворота) от 0 до 31
xp=((cos(z*16))/32) * a * sign // вычисляем прирощение по оси X
yp=((sin(z*16))/32) * a * sign // вычисляем прирощение по оси Y
ret

OPROS_FON:
if w > 250 {w=250} // ограничиваем громкость по максимуму
if w < 50 {w=50} // ограничиваем громкость по минимуму

m=0 while(m < y_car)
{
n=0 while(n < x_car)
{
zzz=x_car*y_car*z+n2
if car[zzz] != 0
{
x_opr = x/P-x_car/2+n
y_opr = y/P-y_car/2+m
color_fon = get_dot (x_opr,y_opr)
stop_blue
zanos_green
medl_red
otskok_white
}
n+1 n2+1
}
m+1
}
n2=0
ret

stop_blue: // останавливаемся, если наезжаем на синий цвет
if color_fon = BLUE {a=0 y=y-yp*2 x=x-xp*2 yp=0 xp=0
send_sound( bum_zvuk1 , 1000, 1, 0 ) }
ret

zanos_green: // заносит, если наезжаем на зеленый цвет, типа масляное пятно
if color_fon = GREEN {z=z-(sin(get_timer(0)/8)/2+128)/128 send_sound( vizg_zvuk1 , 4400, 2, 0 ) if z<0 | z>31 {z=0}}
ret

medl_red: // не можем разогнаться, если наезжаем на красный цвет, типа грязь
if color_fon = RED {xp=((cos(z*16))/32)*a/4*sign yp=((sin(z*16))/32)*a/4*sign send_sound( graz_zvuk , 400, 1, 0 )}
ret

otskok_white: // отскакиваем, если наезжаем на белый цвет
if color_fon = WHITE {
if zadnij=0 {xp=-((cos(z*16))/32) yp=-((sin(z*16))/32)}
if zadnij=1 {xp=((cos(z*16))/32) yp=((sin(z*16))/32)}
a=0 w=50 send_sound( bum_zvuk2 , 4000, 1, 0 )
}
ret

PAUSE: // пауза
SCREENSHOT
PAUSE1:
pixi(scr) // отрисовываем скриншот
t = get_timer( 0 )
pixel_shader( PIXEL_SHADER_2 )
fpixi( img, 0, csin( t / 8 ) / 8, 2, 1, 1 )
pixel_shader( -1 )
pixel_shader( MY_PIXEL_SHADER_GLASS )
print ("ПАУЗА",-20,csin( t / 8 ) / 8 - 4, SNEG)
transp( cos( t/2 ) )
pixel_shader( -1 )
print ("ПАУЗА",-20,csin( t / 8 ) / 8 - 4, SNEG)
transp( 256 )
handle_hard_keys({if ghk > 31 & ghk < 256 { make_pause=0 }},{})
frame (30)
if make_pause=0 { goto unu }
goto PAUSE1

HELP: // окно помощи
x_SM=-80 y_SM=-40 // координаты окна
xd_SM=160 yd_SM=80 // ширина и высота окна
SCREENSHOT_MASK // делаем скриншот и прозрачную область с параметрами окна помощи
pixi (scr_mask) // отрисовываем скриншот с прозрачной областью
xtext=x_scr/2-20 // координата бегучки по X
HELP1:
t = get_timer( 0 )
effector( BLACK, (sin(t/4)/2 + 128)/8+8, 1, x_SM, y_SM, xd_SM, yd_SM, 1 )
effector( BLACK, (sin(t/4)/2 + 128)/8+8, 2, x_SM, y_SM, xd_SM, yd_SM, 1 )
transp (32)
fbox( x_SM, y_SM, xd_SM, yd_SM, BLUE ) // фон менюшки
transp (256)

print ("
Управление: курсор
Пауза: пробел
Помощь: 'H'
Выход: Esc
",-75,-40, SNEG)

text="Версия игры 0.6 (очень ранняя альфа) В ней реализованы: главное меню, пауза, хелп, выход из игры по 'Esc'"
print (text,xtext,25, SNEG)
xtext-1
if xtext<-(get_string_size (text)*8)-xd_SM/2 {xtext=x_scr/2-20}
pixi (scr_mask) //вывод маскированного скриншота
t_scale(256*2,256,256)
pixel_shader( PIXEL_SHADER_2 )
fpixi( img,0,-50,2,1,1)
t_reset
pixel_shader( MY_PIXEL_SHADER_GLASS )
print ("ПОМОЩЬ",-24,-54, SNEG)
transp( cos( t/2 ) )
pixel_shader( -1 )
print ("ПОМОЩЬ",-24,-54, SNEG)
transp( 256 )
handle_hard_keys({if ghk < 256 { make_help=0 }},{})
frame (30)
if make_help=0 { goto unu }
goto HELP1

MY_PIXEL_SHADER_GLASS:
v = get_red( PS_T[ PS_TP - 1 ] ) - get_red( PS_T[ PS_TP + 1 ] )
PS_R = get_blend( scr0[ PS_P + get_red( PS_T[ PS_TP ] ) / 8 ], WHITE, v )
ret

PIXEL_SHADER_2:
tt = t / 4 c = rand&255 PS_R = get_color(csin(PS_TY/8+tt),ccos(PS_TY/8+tt)+c/4,c*8)
ret

PIXEL_SHADER_3:
tt = t / 4 c = rand&255+128 PS_R = get_color(csin(PS_TY/8+tt)+128,ccos(PS_TX/4+tt)+c/4,c*8+128)
ret

PIXEL_SHADER_4:
tt = t / 4 c = rand&64+256 PS_R = get_color(csin(PS_TY/8+tt)+256,ccos(PS_TX/4+tt)+c/2,c*8+512)

ret

SCREENSHOT: // делаем копию экрана
scr_0 = 0
scr = new_pixi(x_scr,y_scr,1)
pp=0 while pp<(x_scr*y_scr) {scr[pp]=scr_0[pp] pp+1}
ret

SCREENSHOT_MASK: // делаем копию экрана c прозрачной областью
scr_0 = 0
scr_mask = new_pixi(x_scr,y_scr,1)
pp=0 while pp<(x_scr*y_scr) {scr_mask[pp]=scr_0[pp] pp+1}

ySM_1=0 while (ySM_1<yd_SM) {
xSM_1=0 while (xSM_1<xd_SM) {
scr_mask[ (xSM_1-x_SM)+(x_scr*(ySM_1+y_scr/2+y_SM)) ] = YELLOW
xSM_1+1
}
ySM_1+1
}
pixi_transp( scr_mask, 1, YELLOW )
ret

SOUNDS:
B=#FFFFFF
motor_zvuk = "
BBBB
"
make_pixi (motor_zvuk)

B=#FFFFFF
gaz_zvuk1 = "
B..............

BB.............

BBBB...........

BBBBBB.........

BBBBBBBBBBB....

BBBBBBBBBBBBBBB
"
make_pixi (gaz_zvuk1)

B=#FFFFFF
gaz_zvuk2 = "
BBBBBB
BBB...
B.....
"
make_pixi (gaz_zvuk2)

B=#FFFFFF
bum_zvuk1 = "
B.B.B.B.B

.B.B.B.B.

B.B.B.B.B

.B.B.B.B.
"
make_pixi (bum_zvuk1)

B=#000000
bum_zvuk2 = "
B.B.B.B.B

.B.B.B.B.

B.B.B.B.B

.B.B.B.B.

B.B.B.B.B

.B.B.B.B.

B.B.B.B.B

.B.B.B.B.
"
make_pixi (bum_zvuk2)

B=FFFFFF
vizg_zvuk1 = "
B........

.B.......

B........

.....B...

B........

.B.......

B........

.B.B.B.B.
"
make_pixi (vizg_zvuk1)

B=#FFFFFF
graz_zvuk = "
B.B.B.B
"
make_pixi (graz_zvuk)

ret

MAIN_MENU: // начальное меню
noesc(0)
make_start=0
make_set=0
make_info=0
clear
frame(0)
MAIN_MENU1:
t = get_timer( 0 )
pixi (menu_1)
print ("
СТАРТ

НАСТРОЙКИ

О ИГРЕ
",-52,30, YELLOW)

effector( ORANGE, 128, 0, -50, 16*lin+18, 100, 16, 1 )
effector( WHITE, 2, 1, -50, 16*lin+18, 100, 16, 1 )
effector( WHITE, 2, 2, -50, 16*lin+18, 100, 16, 1 )

pixel_shader( PIXEL_SHADER_4 )
print ("
СТАРТ

НАСТРОЙКИ

О ИГРЕ
",-52,30, WHITE)
pixel_shader( -1 )

print ("© Al_Rado 23.01.2008",-100,100, SNEG)

handle_hard_keys({KEYS_MENU},{})
if make_start=1 { VAR_NULO frame (100) goto unu }
if make_set=1 { goto SETTINGS }
if make_info=1 { goto INFO_MENU }
frame (30)
goto MAIN_MENU1

KEYS_MENU:
if ghk = 264 { lin-1 if lin<1 {lin=3} } // перемещаемся вверх
if ghk = 265 { lin+1 if lin>3 {lin=1}} // перемещаемся вниз
if ghk = 32 | ghk = 10 { if lin=1 {make_start=1} if lin=2 {make_set=1} if lin=3 {make_info=1} } // выбор пункта меню
ret

SETTINGS:
clear (WHITE)
print("Здесь будут настройки...",-100,0, BLUE)
frame (3000)
goto MAIN_MENU

INFO_MENU:
clear (RED)
print("
Не пугайтесь :)
Очень ранняя версия",-80,0, WHITE)
frame (3000)
goto MAIN_MENU

ESCAPE:
t = get_timer( 0 )
t_scale(700,256,256)
pixel_shader( PIXEL_SHADER_2 )
fpixi( img,0,0,2,1,1)
t_reset
pixel_shader( MY_PIXEL_SHADER_GLASS )
print ("Покинуть игру? (Y/N)",-80,-4, SNEG)
transp( cos( t/2 ) )
pixel_shader( -1 )
print ("Покинуть игру? (Y/N)",-80,-4, SNEG)
transp( 256 )
handle_hard_keys({if ghk=121 { make_menu=0 } else {make_menu=2}},{}) // если нажат Y - выходим из игры в главное меню
frame (30)
if make_menu=0 { frame(100) goto MAIN_MENU }
if make_menu=2 { frame(100) goto unu }
goto ESCAPE
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!
User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

WIP: Tachka v.07

Post by Al_Rado »

Даже не знаю, стоит ли текст проги выкладывать :) Его не так уж и мало теперь...
В новой версии переработана вся графика. Изменен угол обзора псевдо-3d. Так как моему движку "по-барабану": настоящая изометрия или вообще 2д - я сделал соотношение ¼ (квадрат = один пиксель в высоту – четыре в ширину). Не стандартно, но мне нравится :) Фон и карта логики отрисовывается спрайтами тайловой текстуры и спрайтами. Доработаны менюшки и красивости. Проблемы с застреванием в некоторых местах остались… Не добрался пока до них :)

В архиве сама игра и интерпретаторы под Линукс и Виндовс. Те кто под Вин - запускаем Start.bat, из под Линукса текстовик открыть с помошью pixilang_linux .
Все тут: http://slil.ru/25425948
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!
User avatar
NightRadio
Site Admin
Posts: 3941
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

Re: WIP: Tachka

Post by NightRadio »

С каждым разом все красивше и красивше :) Классно.
Я тут тоже параллельно с подготовкой релиза пробую pixi в роли инструмента для написания маленькой игрушки. А по ходу дела решаю для себя, что в pixi удобно, а что не очень :)
User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

Re: WIP: Tachka

Post by Al_Rado »

Спасибо, куда рости еще есть :)
От лица пользователей Пикси, скажу: ждем с нетерпением и нового релиза и мини-игрушки!
Изучать программинг намного проще и интереснее ковыряясь в исходниках уже готовых творений!
Заготовки для игрушек и демок это нужная вещь, но законченные проекты имеют пожалуй и самоценность. Именно поэтому планирую довести мини-игрушку "Тачка" до логического завершения.
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!
xx2
Posts: 2
Joined: Wed Apr 16, 2008 11:50 pm

Re: WIP: Tachka

Post by xx2 »

Al_Rado, а нельзя ли выложить последнюю версию вместе со спрайтами еще раз куда-нибудь. а то слил.ру все прибил, а взглянуть было бы очень любопытно :)
(например, http://narod.yandex.ru/disk/ обещает срок хранения от 3 месяцев)
User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

Re: WIP: Tachka

Post by Al_Rado »

Самую свежую версию 07 можешь найти тут http://pixilang.googlecode.com/files/pi ... amples.zip в папке different\tachka_07
Пора ее давно уже обновить ) да вот руки все не дойдут... или ноги ))
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!
xx2
Posts: 2
Joined: Wed Apr 16, 2008 11:50 pm

Re: WIP: Tachka

Post by xx2 »

спасибо! прикольно :)
случайно наткнулся на pixilang -- выглядит очень интересно. давно мечтал о чем-то флэшеподобном для программирования несложных графических хреновин на кпк :)
правда, несколько непривычно отказываться от дробных чисел, но какие-никакие обходные варианты есть, а если вспомнить, во времена ZX для синусов всегда таблички строили :)
User avatar
NightRadio
Site Admin
Posts: 3941
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

Re: WIP: Tachka

Post by NightRadio »

Понимаю, от дробных чисел непросто отказаться :) Но это было сделано в пользу упрощения языка и увеличения скорости. Возможно, в будущем, дробные числа таки появятся в Pixilang, но это пока открытый вопрос :)
p.s. Сейчас я занимаюсь оптимизацией языка, отрабатываю различные варианты для более шустрой работы Pixi. Новый релиз не за горами.
User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

Re: WIP: Tachka

Post by Al_Rado »

Оптимизация по скорости дело необходимое... А экспансия на мобильные, посредством Явы не предполагается? Есть у меня палмик, да больно уж стар и чернобел ) А вот на сотовых сразу Пикси распространение получил бы, ух :)
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!
User avatar
NightRadio
Site Admin
Posts: 3941
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

Re: WIP: Tachka

Post by NightRadio »

К Java, честно говоря, душа не очень лежит... :) Тут времени много нужно - на порт всего движка под Java и дальнейшую поддержку.
User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

Re: WIP: Tachka

Post by Al_Rado »

Ну чтож, значит у Пикси свой путь :) Во всяком случае, где Pixilang там победа! Вот и ХХ2 тож зацепило :)
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!
User avatar
NightRadio
Site Admin
Posts: 3941
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

Re: WIP: Tachka

Post by NightRadio »

так точно :)
http://nradio.blogspot.com/
Post Reply