JustPaste.it

/*
example:
- TUMB R@IDER - CLONE

*/


include "yeti3d.h"



global
filemodel;
filepalanca,

yeti_gravity= -16;
TYPE_ENTITY_3D mycam;
TYPE_ENTITY_3D player;
estacorriendo=false;
desactivarCamaraGlobal=false;
puertaabierta= false;
soundpalanca;
soundmuro;
string IsFrontObject;
string IsFrontObjectAndLooking;

end;



private
res,i;


begin
// full_screen=TRUE;

SET_FPS(30,0); //MAX ENGINE FPS

set_mode (YETI_SCREEN_WIDTH,YETI_SCREEN_HEIGHT,16);

graph= new_map(YETI_SCREEN_WIDTH,YETI_SCREEN_HEIGHT,16);
SET_CENTER(file,graph,0,0);//center bitmap
x=0; y=0; z=45;

//(texture,palette)
WRITE(0,10,20,0,"FENIX FPS: ");
WRITE_INT(0,100,20,0,&FPS);
WRITE_string(0,100,120,0,& IsFrontObject);
WRITE_string(0,100,140,0,& IsFrontObjectAndLooking);


filemodel= yeti_loadfile("media/girl.bin"); //3d model
filepalanca= yeti_loadfile("media/palanca.bin"); //3d model

soundmuro= load_wav("media/fx/muro.wav");
soundpalanca= load_wav("media/fx/palanca.wav");


YETI_SETRENDERGRAPH(file,graph); //fpgfile,graph

YETI_LOADTEXTURE("media/textures.raw", "media/textures.pal");
yeti_init( &mycam, "media/mapa.y3d" );//ENTITYCAMERA,FILEMAP


crear_modelo(8, 49);

mycam.radius=0;
mycam.x=i2f(6);
mycam.y=i2f(47);
frame;


palanca(12,55);


while ( !key(_esc) )
// Set_title(f2i(MYCAM.x)+ " - " + f2i(MYCAM.y)+ " - "+MYCAM.z+ " cam z"+mycam.z);

mycam.radius=0;
mycam.nocollision=true; //camara no colisiona
mycam.nocollisionwall=true;

if (NOT desactivarCamaraGlobal)
yeti_entity_look_at2(mycam, player.x,player.y, mycam.z);//apuntar hacia modelo

if(yeti_getdistance(mycam,player) > 4)
mycam.xx += yeti_fixsin(mycam.t) >> 2; //move forward
mycam.yy += yeti_fixcos(mycam.t) >> 2;
end

YETI_ENTITY_DEFAULT(&mycam,0,0,60);
END


frame;
end;

let_me_alone() ;

//free resources
yeti_FREE();
end

 

 

process crear_modelo(x,y)
private
I=1,tick=0;
estado=false;
TYPE_ENTITY_3D temppos;

begin
if (not yeti_addmodel(filemodel , &player))//FILEID,ENTITYVAR
return ;
end;


player.x= i2f(x);
player.y= i2f(y);
player.z=0;
player.radius=0;
player.Fixz= -180; //arreglar el modelo que esta desubicado (Z) al escalarlo
player.scalemodel= 0.5; // el modelo es grande , asi que escalarlo a la mitad
frame;

loop
// yeti_entity_freeze(pos); //quita velocidad al personaje


if (estacorriendo and NOT estado) //a correr - RUN
//2-8 correr
YETI_MODELANIM(&player, 40,5, 80, LOOP_FOREVER);//entity,FRAMEINIT,#FRAMES,SPEED,LOOP
estado=true;
else
IF (NOT estacorriendo) //quietooo - FREEZE
//0-1 quieto
YETI_MODELANIM(&player, 0,1, 80, LOOP_FOREVER);//entity,FRAMEINIT,#FRAMES,SPEED,LOOP
estado=false;
end
end

if (key(_RIGHT))
player.tt += i2f(2);
end;
if (key(_LEFT))
player.tt -= i2f(2);
end;

estacorriendo=false;
if (key(_UP))
estacorriendo=true;
player.xx += YETI_fixsin(player.t) >> 1;
player.yy += YETI_fixcos(player.t) >> 1;
end;
if (key(_DOWN))
estacorriendo=true;

player.xx -= YETI_fixsin(player.t) >> 1;
player.yy -= YETI_fixcos(player.t) >> 1;
end;
if (key(_space) and YETI_ENTITY_IN_GROUND(player) ) //verificar q esta tocando piso
player.zz+= 100;
end

YETI_ENTITY_DEFAULT(&player,0,0,160);//posiciona el modelo de acuerdo al terreno

frame;
end

end;

 

 

function RangeOfView(TYPE_ENTITY_3D e1, TYPE_ENTITY_3D e2, int range)
private
TYPE_ENTITY_3D tmp_e;
calculo;
e1_t; //dnt update original

begin
tmp_e= e1;
YETI_ENTITY_LOOK_AT2(tmp_e, e2.x, e2.y, e2.z );//point e1 to e2

//calcule range of view
e1_t = abs(e1.t);
tmp_e.t = abs(tmp_e.t);

if (e1_t > tmp_e.t)
calculo = e1_t - tmp_e.t;
else
calculo = tmp_e.t - e1_t;
end

if ( calculo <= range AND calculo > 0) //view range
return true;
else
return false;
end
end

 

 

process palanca(x,y)
private
TYPE_ENTITY_3D pos, temp_player;
string cadena;
texto;
canal;
calculo ;

begin
if (not YETI_ADDMODEL(filepalanca , &pos))//SPRITEID,ENTITYVAR
return ;
end;

pos.x= i2f(x) ;
pos.y= i2f(y) ;
pos.z= 0;
pos.radius= 0;

POS.FIXz= -1100;
POS.scalemodel= 0.5;
frame;

texto= WRITE_string(0,100,50,0,&cadena);

loop
if (YETI_ENTITY_LINE_OF_SIGHT(pos, player ))
IsFrontObject = "On line of sight";

if (RangeOfView(player, pos, i2f(10) ) ) //calculates range of view
IsFrontObjectAndLooking ="On line of sight and Looking";
else
IsFrontObjectAndLooking ="";
end;

else
IsFrontObjectAndLooking="";
IsFrontObject = "";
end;


if (yeti_getdistance(pos, player) < 4)
cadena="Open Door - Press 'A' ";

IF (KEY(_A)) //abre puerta si presiona A
canal= PLAY_WAV(soundpalanca, -1);

//mueve la palanca
YETI_MODELANIM(&pos, 0,35, 80, 1); //animacion de mover palanca desde frame 0 avanza 35 frames
timer[9]=0;
while(timer[9] < 400) //4 seconds
frame;
end

if (is_playing_wav(canal) ) //stop sound
STOP_WAV(canal);
end

AbrirPuerta();
delete_text(texto); //salir del proceso sin borrar el texto , ocasiona error

loop //no hace nada la palanca (mantiene vivo el proceso ya que la variable POS desapareceria y ocasionaria error)
frame;
end
END
else
cadena="";
end

frame;
end

end

 


process AbrirPuerta()
private
TYPE_CELL_3D celda1, //se hubiera podido hacer con 1 variable pero x motivos didacticos se usan 4
celda2, celda3, celda4;
i;
AlturaBaja= -2064; //altura del piso en esa zona
canal;

begin
canal= PLAY_WAV(soundmuro, -1);

camara_puerta(7, 47, 5, 26);// se llama a la camara que apunta

YETI_GETCELL( 4, 26 , &celda1); //puerta conformada por 4 paredes (estas coordenadas se toman del editor - selected cell)
YETI_GETCELL( 5, 26 , &celda2);
YETI_GETCELL( 6, 26 , &celda3);
YETI_GETCELL( 7, 26 , &celda4);

i= celda1.bot;
loop

celda1.BOT = i;
YETI_SETCELL( &celda1);
celda2.BOT = i;
YETI_SETCELL( &celda2);
celda3.BOT = i;
YETI_SETCELL( &celda3);
celda4.BOT = i;
YETI_SETCELL( &celda4);

i-= 20;

if (i <= AlturaBaja)
puertaabierta= true;
if (is_playing_wav(canal) ) //stop sound
STOP_WAV(canal);
end

return; //cuando alcanza el suelo se sale del proceso
end

frame;
end

end


PROCESS camara_puerta(x1, y1, x2, y2)//apunta la camara a un punto
begin
desactivarCamaraGlobal= true;

mycam.x= i2f(x1);
mycam.y= i2f(y1);
frame;


loop
yeti_entity_look_at(mycam, i2f(x2), i2f(y2), mycam.z);//apuntar hacia punto
if (puertaabierta) //deja de apuntar la camara cuando la puerta esta abierta
break;
end

frame;
end

desactivarCamaraGlobal=false;
end