signal!! :D

This commit is contained in:
Gabriel Lorenzo 2002-10-30 20:12:22 +00:00
parent e62cfb662d
commit c59f57e7af
10 changed files with 92 additions and 26 deletions

View file

@ -1,8 +1,10 @@
30/10/2002 30/10/2002
---------- ----------
* Añadido la variable RESOLUTION, que a la hora de compilar el TUTOR2.PRG daba problemas. * Añadido la variable RESOLUTION, que a la hora de compilar el TUTOR2.PRG daba problemas.
Ya se puede usar RESOLUTION =) (|RooT|) Ya se puede usar RESOLUTION =) (|RooT|)
* Corregido en la graphics donde ponia "trasparente" por "traNsparente".
(Er_Makina)
* ¡Funciona Signal! =) Solo falta testearlo... (Er_Makina)
29/10/2002 29/10/2002
---------- ----------

View file

@ -189,8 +189,8 @@ BEGIN
mueve_robots(); mueve_robots();
end end
end end
//signal(prota,s_kill); signal(prota,s_kill);
//signal(type robot,s_kill); signal(type robot,s_kill);
muertos=0; muertos=0;
cogido=0; cogido=0;
ya=0; ya=0;

Binary file not shown.

View file

@ -161,6 +161,7 @@ int ExportaFuncs(EXPORTAFUNCS_PARAMS)
FUNCTION("exit",2,eDIV_Exit); FUNCTION("exit",2,eDIV_Exit);
FUNCTION("get_id",1,eDiv_GetId) ; FUNCTION("get_id",1,eDiv_GetId) ;
FUNCTION("define_region",5,eDiv_DefineRegion) ; FUNCTION("define_region",5,eDiv_DefineRegion) ;
FUNCTION("signal",2,eDIV_Signal);
ENTRYPOINT( first_load ) ; ENTRYPOINT( first_load ) ;
ENTRYPOINT(frame); ENTRYPOINT(frame);
@ -242,9 +243,54 @@ int eDiv_DefineRegion(FUNCTION_PARAMS)
return 1 ; return 1 ;
} }
void signal_tree(int proc, int signal, FUNCTION_PARAMS)
{
int id2;
if(id2=local("son",proc)) {
signal_tree(id2,signal,fp);
reserved("status",proc)=signal;
}
while(local("bigbro",proc)) {
proc=local("bigbro",proc);
reserved("status",proc)=signal;
}
/*while(local("smallbro",proc)) {
proc=local("smallbro",proc);
reserved("status",proc)=signal;
}*/
}
int eDIV_Signal(FUNCTION_PARAMS) int eDIV_Signal(FUNCTION_PARAMS)
{ {
int signal=getparm();
int proc=getparm();
char tree=FALSE;
if(signal>=100) {
signal-=100;
tree=TRUE;
}
signal++;
/* Si se le pasa un ID */
if(proc<fp->imem_max)
{
reserved("status",proc)=signal;
if(tree && (proc=reserved("son",proc)))
signal_tree(proc,signal,fp);
}
/* Si se le pasa un type */
else {
int i,p;
for(i=0;i<*fp->num_procs;i++) {
if(fp->procs_s[fp->proc_orden[i]].tipo==proc) {
reserved("status",fp->procs_s[fp->proc_orden[i]].id)=signal;
if(tree && (p=reserved("son",fp->procs_s[fp->proc_orden[i]].id)))
signal_tree(fp->procs_s[fp->proc_orden[i]].id,signal,fp);
}
}
}
} }

View file

@ -7,3 +7,4 @@ struct _regions regions[32] ;
int eDIV_Exit(FUNCTION_PARAMS); int eDIV_Exit(FUNCTION_PARAMS);
int eDiv_GetId(FUNCTION_PARAMS) ; int eDiv_GetId(FUNCTION_PARAMS) ;
int eDiv_DefineRegion(FUNCTION_PARAMS) ; int eDiv_DefineRegion(FUNCTION_PARAMS) ;
int eDIV_Signal(FUNCTION_PARAMS);

View file

@ -23,8 +23,8 @@ int eDIV_UNLOAD_MAP(FUNCTION_PARAMS);
*/ */
int eDIV_LOAD_BMP(FUNCTION_PARAMS); int eDIV_LOAD_BMP(FUNCTION_PARAMS);
int eDIV_COLLISION(FUNCTION_PARAMS); int eDIV_COLLISION(FUNCTION_PARAMS);
int eDIV_SET_TRASPARENT_COLOR(FUNCTION_PARAMS); int eDIV_SET_TRANSPARENT_COLOR(FUNCTION_PARAMS);
int eDIV_GET_TRASPARENT_COLOR(FUNCTION_PARAMS); int eDIV_GET_TRANSPARENT_COLOR(FUNCTION_PARAMS);
int eDIV_RGB(FUNCTION_PARAMS); int eDIV_RGB(FUNCTION_PARAMS);
int eDIV_ADVANCE(FUNCTION_PARAMS); int eDIV_ADVANCE(FUNCTION_PARAMS);
int eDIV_XADVANCE(FUNCTION_PARAMS) ; int eDIV_XADVANCE(FUNCTION_PARAMS) ;

View file

@ -32,7 +32,7 @@ SDL_Surface *Mapa[0xFFF] ;
SDL_Surface *fondo ; SDL_Surface *fondo ;
struct _file file0[0xFFF] ; struct _file file0[0xFFF] ;
int last_map[0xFF] ; int last_map[0xFF] ;
int color_trasparente ; int color_transparente ;
int define_region ; int define_region ;
typedef struct { typedef struct {
@ -147,8 +147,8 @@ int ExportaFuncs(EXPORTAFUNCS_PARAMS)
FUNCTION("load_bmp",1,eDIV_LOAD_BMP) ; FUNCTION("load_bmp",1,eDIV_LOAD_BMP) ;
FUNCTION("collision",1,eDIV_COLLISION) ; FUNCTION("collision",1,eDIV_COLLISION) ;
FUNCTION("set_trasparent_color",1,eDIV_SET_TRASPARENT_COLOR) ; FUNCTION("set_transparent_color",1,eDIV_SET_TRANSPARENT_COLOR) ;
FUNCTION("get_trasparent_color",0,eDIV_GET_TRASPARENT_COLOR) ; FUNCTION("get_transparent_color",0,eDIV_GET_TRANSPARENT_COLOR) ;
FUNCTION("rgb",3,eDIV_RGB) ; FUNCTION("rgb",3,eDIV_RGB) ;
FUNCTION("advance",1,eDIV_ADVANCE) ; FUNCTION("advance",1,eDIV_ADVANCE) ;
FUNCTION("xadvance",2,eDIV_XADVANCE) ; FUNCTION("xadvance",2,eDIV_XADVANCE) ;
@ -173,7 +173,7 @@ int ExportaFuncs(EXPORTAFUNCS_PARAMS)
FUNCTION("graphic_info",3,eDIV_GRAPHIC_INFO) ; FUNCTION("graphic_info",3,eDIV_GRAPHIC_INFO) ;
FUNCTION("fade",4,eDIV_FADE) ; FUNCTION("fade",4,eDIV_FADE) ;
FUNCTION("xput",6,eDIV_XPUT); FUNCTION("xput",6,eDIV_XPUT);
FUNCTION("setmode",4,eDIV_SETMODE); // FUNCTION("setmode",4,eDIV_SETMODE);
ENTRYPOINT( frame ) ; ENTRYPOINT( frame ) ;
ENTRYPOINT( first_load ) ; ENTRYPOINT( first_load ) ;
@ -211,6 +211,7 @@ int eDIV_COLLISION(FUNCTION_PARAMS)
int id1, id2 ; int id1, id2 ;
int a, i ; int a, i ;
SDL_Rect r1 , r2 ; SDL_Rect r1 , r2 ;
int _status=reservedptr("status");
a = getparm() ; a = getparm() ;
id1 = fp->procs_s[ fp->proc_orden[ *fp->proceso_actual ] ].id ; id1 = fp->procs_s[ fp->proc_orden[ *fp->proceso_actual ] ].id ;
@ -224,7 +225,8 @@ int eDIV_COLLISION(FUNCTION_PARAMS)
//if ( a < 4000000 ) //if ( a < 4000000 )
if(a<fp->imem_max) if(a<fp->imem_max)
{ {
if(a==id1) return 0; if(a==id1 || (fp->mem[id1+_status]!=2 && fp->mem[id1+_status]!=4))
return 0;
r1.x = local("x",id1) ; r1.x = local("x",id1) ;
r1.y = local("y",id1) ; r1.y = local("y",id1) ;
r1.w = files[f1].mapa[g1].Surface->w ; r1.w = files[f1].mapa[g1].Surface->w ;
@ -259,7 +261,8 @@ int eDIV_COLLISION(FUNCTION_PARAMS)
for ( i = *id_scan+1 ; i < *fp->num_procs ; i++ ) for ( i = *id_scan+1 ; i < *fp->num_procs ; i++ )
{ {
id2 = fp->procs_s[ fp->proc_orden[ i ] ].id; id2 = fp->procs_s[ fp->proc_orden[ i ] ].id;
if(id2==id1) continue; if(id2==id1 || (fp->mem[id1+_status]!=2 && fp->mem[id1+_status]!=4))
continue;
//Si el proceso se corresponde con el type //Si el proceso se corresponde con el type
if ( reserved("process_type",id2) == a ) if ( reserved("process_type",id2) == a )
@ -317,7 +320,7 @@ int eDIV_LOAD_BMP(FUNCTION_PARAMS)
files[0].mapa[i].existe = 1 ; files[0].mapa[i].existe = 1 ;
files[0].mapa[i].cpoint[0].x = (int)files[0].mapa[i].Surface->w / 2 ; files[0].mapa[i].cpoint[0].x = (int)files[0].mapa[i].Surface->w / 2 ;
files[0].mapa[i].cpoint[0].y = (int)files[0].mapa[i].Surface->h / 2 ; files[0].mapa[i].cpoint[0].y = (int)files[0].mapa[i].Surface->h / 2 ;
SDL_SetColorKey( files[0].mapa[i].Surface , SDL_SRCCOLORKEY | SDL_RLEACCEL , color_trasparente ) ; SDL_SetColorKey( files[0].mapa[i].Surface , SDL_SRCCOLORKEY | SDL_RLEACCEL , color_transparente ) ;
if ( i > last_map[0] ) if ( i > last_map[0] )
last_map[0] = i ; last_map[0] = i ;
return i ; return i ;
@ -336,16 +339,16 @@ int eDIV_LOAD_BMP(FUNCTION_PARAMS)
/* */ /* */
/*****************************************************************/ /*****************************************************************/
int eDIV_SET_TRASPARENT_COLOR(FUNCTION_PARAMS) int eDIV_SET_TRANSPARENT_COLOR(FUNCTION_PARAMS)
{ {
int b , i; int b , i;
int a = getparm() ; int a = getparm() ;
b = color_trasparente ; b = color_transparente ;
color_trasparente = a ; color_transparente = a ;
for ( i = 1 ; i <= last_map[0] ; i++ ) for ( i = 1 ; i <= last_map[0] ; i++ )
{ {
if ( files[0].mapa[i].existe ) if ( files[0].mapa[i].existe )
SDL_SetColorKey( files[0].mapa[i].Surface , SDL_SRCCOLORKEY | SDL_RLEACCEL , color_trasparente ) ; SDL_SetColorKey( files[0].mapa[i].Surface , SDL_SRCCOLORKEY | SDL_RLEACCEL , color_transparente ) ;
} }
return b ; return b ;
} }
@ -358,9 +361,9 @@ int eDIV_SET_TRASPARENT_COLOR(FUNCTION_PARAMS)
/* */ /* */
/*****************************************************************/ /*****************************************************************/
int eDIV_GET_TRASPARENT_COLOR(FUNCTION_PARAMS) int eDIV_GET_TRANSPARENT_COLOR(FUNCTION_PARAMS)
{ {
return color_trasparente ; return color_transparente ;
} }
/*****************************************************************/ /*****************************************************************/
@ -807,7 +810,7 @@ int eDIV_NEW_MAP(FUNCTION_PARAMS)
files[0].mapa[i].cpoint[0].x = cx ; files[0].mapa[i].cpoint[0].x = cx ;
files[0].mapa[i].cpoint[0].y = cy ; files[0].mapa[i].cpoint[0].y = cy ;
SDL_FillRect( files[0].mapa[i].Surface , NULL , c ) ; SDL_FillRect( files[0].mapa[i].Surface , NULL , c ) ;
SDL_SetColorKey( files[0].mapa[i].Surface , SDL_SRCCOLORKEY | SDL_RLEACCEL , color_trasparente ) ; SDL_SetColorKey( files[0].mapa[i].Surface , SDL_SRCCOLORKEY | SDL_RLEACCEL , color_transparente ) ;
if ( i > last_map[0] ) if ( i > last_map[0] )
last_map[0] = i ; last_map[0] = i ;
return i ; return i ;
@ -1258,7 +1261,12 @@ void frame(FUNCTION_PARAMS)
for ( i = 0 ; i < *fp->num_procs ; i++ ) for ( i = 0 ; i < *fp->num_procs ; i++ )
{ {
int _status=reservedptr("status");
id = fp->procs_s[ fp->proc_orden[i] ].id ; id = fp->procs_s[ fp->proc_orden[i] ].id ;
if(fp->mem[id+_status]!=2 && fp->mem[id+_status]!=4)
continue;
f = local("file",id); f = local("file",id);
g = local("graph",id); g = local("graph",id);
r = local("region",id); r = local("region",id);
@ -1378,7 +1386,7 @@ void first_load(FUNCTION_PARAMS2)
for ( i = 0 ; i < 0xFF ; i++ ) for ( i = 0 ; i < 0xFF ; i++ )
last_map[i] = 0 ; last_map[i] = 0 ;
color_trasparente = 0 ; color_transparente = 0 ;
if (SDL_Init(SDL_INIT_VIDEO)) ; if (SDL_Init(SDL_INIT_VIDEO)) ;
//k_error(K_ERR_SDL_INIT); //k_error(K_ERR_SDL_INIT);

View file

@ -141,13 +141,14 @@ int lista_quita( int num )
int interprete() int interprete()
{ {
int i ; int _status=reservedptr("status");
// PROVISIONAL. Se tendra que cambiar para k soporte frame(int) y prioritys // PROVISIONAL. Se tendra que cambiar para k soporte frame(int) y prioritys
if ( num_proc_orden > 0 ) if ( num_proc_orden > 0 )
{ {
for ( proceso_actual = 0 ; proceso_actual < num_proc_orden ; proceso_actual++ ) for ( proceso_actual = 0 ; proceso_actual < num_proc_orden ; proceso_actual++ )
{ {
if(procs_s[proc_orden[proceso_actual]].tipo==0 || mem[procs_s[proc_orden[proceso_actual]].id+_status]==2)
proceso( proc_orden[ proceso_actual ], -1 ) ; proceso( proc_orden[ proceso_actual ], -1 ) ;
} }
Call_Entrypoint(EDIV_frame); Call_Entrypoint(EDIV_frame);
@ -173,6 +174,7 @@ int proceso( int num, int padre )
#ifdef DBG #ifdef DBG
int actual_lin; int actual_lin;
#endif #endif
int _status=reservedptr("status");
num_proc = num ; num_proc = num ;
imem = procs_s[num_proc].imem ; imem = procs_s[num_proc].imem ;
@ -353,6 +355,7 @@ int proceso( int num, int padre )
} }
procs_s[num_proc].tipo = mem[ imem++ ] ; procs_s[num_proc].tipo = mem[ imem++ ] ;
reserved("process_type",procs_s[num_proc].id) = procs_s[num_proc].tipo ; reserved("process_type",procs_s[num_proc].id) = procs_s[num_proc].tipo ;
mem[procs_s[num_proc].id+_status] = 2;
inicio_privadas=mem[6]; inicio_privadas=mem[6];
break ; break ;
case lpri://33 POR HACER? case lpri://33 POR HACER?
@ -554,6 +557,11 @@ int proceso( int num, int padre )
#endif /* DBG */ #endif /* DBG */
} }
if(mem[procs_s[num].id+_status]==1) {
//mem[procs_s[num].id+_status=0;
lista_quita(num_proc);
}
if ( devolver > 0 && no_devuelve == 0 ) if ( devolver > 0 && no_devuelve == 0 )
{ {
//pila[++sp] = 0 ;// AQUI SE DEBERA DEVOLVER EL ID //pila[++sp] = 0 ;// AQUI SE DEBERA DEVOLVER EL ID

View file

@ -367,7 +367,8 @@ int main(int argc, char* argv[])
*/ */
// PETA EN AMD???? <-- y esto? a mi no me peta.. (Er_Makina) // PETA EN AMD???? <-- y esto? a mi no me peta.. (Er_Makina)
tiempo_i ++ ; // me peta a veces por "division entre cero"
/* tiempo_i ++ ;
if ( tiempo_i > 99 ) tiempo_i = 0 ; if ( tiempo_i > 99 ) tiempo_i = 0 ;
tiempo[ tiempo_i ] = SDL_GetTicks() ; tiempo[ tiempo_i ] = SDL_GetTicks() ;
@ -376,7 +377,7 @@ int main(int argc, char* argv[])
else else
if ( tiempo[tiempo_i] - tiempo[tiempo_i+1] != 0 ) if ( tiempo[tiempo_i] - tiempo[tiempo_i+1] != 0 )
global("fps") = 100000 / (tiempo[tiempo_i] - tiempo[tiempo_i+1] ) ; global("fps") = 100000 / (tiempo[tiempo_i] - tiempo[tiempo_i+1] ) ;
*/
//SDL_BlitSurface( imagen1 , NULL , screen , NULL ) ; //SDL_BlitSurface( imagen1 , NULL , screen , NULL ) ;

Binary file not shown.