Si quelqu'un pouvait me dire comment faire pour que vrally ne fasse pas une "invalid relocation..." quand on le lance sur v200, ca m'aiderait pas mal!!!
d'avance merci
MacIntoc a écrit :
c kan que vous arretez de faire des nouvelles beta
// V-RALLY par Vark-Dador
// C Source File
// Created 15/04/01; 08:13:28 with TIGCC 0.91 SP1
#define USE_TI92PLUS // Compile for TI-92 Plus
#define USE_V200 // Compile for V200
#define OPTIMIZE_ROM_CALLS // Use ROM Call Optimization
#define MIN_AMS 200 // Compile for AMS 2.00 or higher
#define SAVE_SCREEN // Save/Restore LCD Contents
#include <tigcclib.h> // Include All Header Files
#include "extgraph.h" // Include ExtGraph lib
//**********************Sprites courses*************************
#include "rsprites.h"
//***************definition du type voiture************************
typedef struct
{
long l[32],d[32],m[32],g1l[32],g1d[32],g1m[32],g2l[32],g2d[32],g2m[32],d1l[32],d1d[32],d1m[32],d2l[32],d2d[32],d2m[32];
}CAR;
//****************Initialisation des variables globales******************
short i,pen,diff;
FILE *fp;
unsigned long *br1l,*br1d,*br1m,*br2l,*br2d,*br2m,*br3l,*br3d,*br3m,*ro1l,*ro1d,*ro1m,*ro2l,*ro2d,*ro2m,*ro3l,*ro3d,*ro3m,*bu1l,*bu1d,*bu1m,*bu2l,*bu2d,*bu2m,*bu3l,*bu3d,*bu3m,*tr1l,*tr1d,*tr1m,*tr2l,*tr2d,*tr2m,*tr3al,*tr3ad,*tr3am,*tr3bl,*tr3bd,*tr3bm;
unsigned char *dbuf,*dec,*dec2;
unsigned char squ[]={0xC0,0xC0};
INT_HANDLER save_int_1;
INT_HANDLER save_int_5;
INT_HANDLER autoint_bkp;
char buffer[50];
void *virtuel;
void *virtuel2;
void *virt;
void *virt2;
void *virtf;
void *virt2f;
void *ALL;
typedef struct
{
short place,dist,pts,val;
}CONCURRENTS;
CONCURRENTS adv[5];
//*****************************Fonctions secondaires******************
#include "functions.h"
//******************************Main Function***********************
void _main(void)
{
///////////////Sprites Divers////////////////////////
#include "osprites.h"
///////////////Variables locales/////////////////////
short i,pl,tot,cp,gm,depl,rang,vibr2,vibr,er2,cf,col,obf,xpf,c,xc,carst,r,ch,h,cycle,xd,dd,vst,ob,xp,ty,ot,rst,wsu,cxd,spd,av,cv,mil,sec,min,rc,er;
short vir=0,obb=0,xpb=0,sr=0,rp=0,tp=0,plpl=0,ttt=1,tt=0;
char course[50];
char buff[50];
char srbuf[50];
char rpbuf[50];
char tpbuf[50];
char cpbuf[50];
CAR car;
if(!(ALL=malloc(6*3840+124+2*1920)))exit(0); //une seule allocation c'est plus rapide
virtuel=ALL;
virtuel2=virtuel+3840;
virt=virtuel2+3840;
virt2=virt+3840;
virtf=virt2+3840;
virt2f=virtf+3840;
dbuf=virt2f+3840;
dec=dbuf+124;
dec2=dec+1920;
autoint_bkp=GetIntVec(AUTO_INT_6);
SetIntVec(AUTO_INT_6,DUMMY_HANDLER);
save_int_1=GetIntVec(AUTO_INT_1);
SetIntVec(AUTO_INT_1,DUMMY_HANDLER);
save_int_5=GetIntVec(AUTO_INT_5);
SetIntVec(AUTO_INT_5,DUMMY_HANDLER);
ST_busy(ST_IDLE);
/////////////////////Intro///////////////////////
ClrScr();
GrayOn();
SetPlane(DARK_PLANE);
title();
wait(15);
///////////////////Menus///////////////////////
//--------------->Menu principal<--------------
menu:
ClearGrayScreen();
FontSetSys(F_4x6);
DrawStr(15,122,"By Jonathan PAILLAT (vark.dador@j2t.fr.st) - Version 1.00F",A_NORMAL);
FontSetSys(F_8x10);
DrawStr(90,6,"MAIN MENU",A_NORMAL);
for (i=45;i<90;i+=20)
{
DrawLine(50,i,190,i,A_NORMAL);
DrawLine(50,i+10,190,i+10,A_NORMAL);
DrawLine(50,i,50,i+10,A_NORMAL);
DrawLine(190,i,190,i+10,A_NORMAL);
}
FontSetSys(F_6x8);
DrawStr(90,47,"Start Game",A_NORMAL);
DrawStr(85,67,"Instructions",A_NORMAL);
DrawStr(92,87,"Quit Game",A_NORMAL);
eff(46);
c=1;
while((_rowread(0x3BF)&0x40)||(_rowread(0x2FF)&0x40)){}
while(1)
{
if(_rowread(0x3FE)&0x80)
{
switch(c)
{
case 1:
eff(66);
c=2;
break;
case 2:
eff(86);
c=3;
break;
}
while(_rowread(0x3FE)&0x80){}
}
if(_rowread(0x3FE)&0x20)
{
switch(c)
{
case 2:
eff(46);
c=1;
break;
case 3:
eff(66);
c=2;
break;
}
while(_rowread(0x3FE)&0x20){}
}
if(_rowread(0x3BF)&0x40)
{
switch(c)
{
case 1:
goto ms;
break;
case 2:
ClearGrayScreen();
title();
FontSetSys(F_8x10);
DrawStr(75,5,"Instructions",A_NORMAL);
FontSetSys(F_6x8);
DrawStr(20,30,"How to play ? ... just drive !",A_NORMAL);
DrawStr(10,47,"Left Pad : Turn Left",A_NORMAL);
DrawStr(10,55,"Right Pad : Turn ... Right !!!",A_NORMAL);
DrawStr(10,63,"[APPS] : Pause",A_NORMAL);
DrawStr(10,71,"[ESC] : Exit Game :(",A_NORMAL);
DrawStr(10,79,"[+]/[-] : Adjust Contrast",A_NORMAL);
DrawStr(10,87,"[LOCK] : Speed Up",A_NORMAL);
DrawStr(10,95,"[F1] : Brake",A_NORMAL);
DrawStr(10,103,"[MODE] : Teacher Key :D",A_NORMAL);
FontSetSys(F_4x6);
DrawStr(55,122,"Member of j2t: http://www.j2t.fr.st/",A_NORMAL);
while(_rowread(0x3BF)&0x40){}
while(1)
{
if(_rowread(0x3BF)&0x40)
goto menu;
}
break;
case 3:
while(_rowread(0x3BF)&0x40){}
goto fin;
break;
}
}
if(_rowread(0x2FF)&0x40)
goto fin;
}
//--------------->Sélection mode<--------------
ms:
ClearGrayScreen();
title();
FontSetSys(F_8x10);
DrawStr(75,6,"SELECT MODE",A_NORMAL);
FontSetSys(F_6x8);
DrawStr(10,110,"CHALLENGE",A_NORMAL);//10->64
DrawStr(80,80,"SINGLE RACE",A_NORMAL);//80->146
DrawStr(155,110,"CHAMPIONSHIP",A_NORMAL);//155->227
Sprite8_XOR(72,79,8,dte,GetPlane(1));//> 2 <
Sprite8_XOR(148,79,8,gche,GetPlane(1));
Sprite32_XOR(25,66,32,tric,GetPlane(1));
Sprite32_XOR(100,36,32,vol,GetPlane(1));
Sprite32_XOR(175,66,32,laur,GetPlane(1));
Sprite32_OR(25,66,32,tric,GetPlane(0));
Sprite32_OR(100,36,32,vol,GetPlane(0));
Sprite32_OR(175,66,32,laur,GetPlane(0));
c=2;
while((_rowread(0x3BF)&0x40)||(_rowread(0x2FF)&0x40)){}
while(1)
{
if((_rowread(0x3FE)&0x40)&&c==1)
{
c=2;
Sprite8_XOR(72,79,8,dte,GetPlane(1));//>
Sprite8_XOR(2,109,8,dte,GetPlane(1));
Sprite8_XOR(148,79,8,gche,GetPlane(1));//<
Sprite8_XOR(67,109,8,gche,GetPlane(1));
while(_rowread(0x3FE)&0x40){}
}
else if((_rowread(0x3FE)&0x40)&&c==2)
{
c=3;
Sprite8_XOR(148,109,8,dte,GetPlane(1));//>
Sprite8_XOR(72,79,8,dte,GetPlane(1));
Sprite8_XOR(229,109,8,gche,GetPlane(1));//<
Sprite8_XOR(148,79,8,gche,GetPlane(1));
while(_rowread(0x3FE)&0x40){}
}
else if((_rowread(0x3FE)&0x10)&&c==3)
{
c=2;
Sprite8_XOR(72,79,8,dte,GetPlane(1));//>
Sprite8_XOR(148,109,8,dte,GetPlane(1));
Sprite8_XOR(148,79,8,gche,GetPlane(1));//<
Sprite8_XOR(229,109,8,gche,GetPlane(1));
while(_rowread(0x3FE)&0x10){}
}
else if((_rowread(0x3FE)&0x10)&&c==2)
{
c=1;
Sprite8_XOR(2,109,8,dte,GetPlane(1));//>
Sprite8_XOR(72,79,8,dte,GetPlane(1));
Sprite8_XOR(67,109,8,gche,GetPlane(1));//<
Sprite8_XOR(148,79,8,gche,GetPlane(1));
while(_rowread(0x3FE)&0x10){}
}
else if(_rowread(0x3BF)&0x40)
{
gm=c;
tot=6;
goto ds;
for(i=0;i<5;i++)
{
adv[i].pts=0;
}
rp=0;
tp=0;
}
else if(_rowread(0x2FF)&0x40)
goto menu;
}
//--------------->Sélection difficultée<--------------
ds:
ClearGrayScreen();
title();
FontSetSys(F_8x10);
DrawStr(50,6,"SELECT DIFFICULTY",A_NORMAL);
FontSetSys(F_6x8);
DrawStr(50,90,"ARCADE",A_NORMAL);//35->71
DrawStr(132,90,"SIMULATION",A_NORMAL);//132->192
Sprite8_XOR(42,89,8,dte,GetPlane(DARK_PLANE));//> arcade <
Sprite8_XOR(87,89,8,gche,GetPlane(DARK_PLANE));
Sprite32_XOR(52,46,32,comp,GetPlane(DARK_PLANE));
Sprite32_XOR(146,46,32,cask,GetPlane(DARK_PLANE));
Sprite32_OR(52,46,32,comp,GetPlane(LIGHT_PLANE));
Sprite32_OR(146,46,32,cask,GetPlane(LIGHT_PLANE));
c=1;
while((_rowread(0x3BF)&0x40)||(_rowread(0x2FF)&0x40)){}
while(1)
{
if((_rowread(0x3FE)&0x40)&&c==1)
{
Sprite8_XOR(42,89,8,dte,GetPlane(DARK_PLANE));//> arcade <
Sprite8_XOR(87,89,8,gche,GetPlane(DARK_PLANE));
Sprite8_XOR(124,89,8,dte,GetPlane(DARK_PLANE));//> simulation <
Sprite8_XOR(196,89,8,gche,GetPlane(DARK_PLANE));
c=2;
while(_rowread(0x3FE)&0x40){}
}
else if((_rowread(0x3FE)&0x10)&&c==2)
{
Sprite8_XOR(124,89,8,dte,GetPlane(DARK_PLANE));//> simulation <
Sprite8_XOR(196,89,8,gche,GetPlane(DARK_PLANE));
Sprite8_XOR(42,89,8,dte,GetPlane(DARK_PLANE));//> arcade <
Sprite8_XOR(87,89,8,gche,GetPlane(DARK_PLANE));
c=1;
while(_rowread(0x3FE)&0x10){}
}
else if(_rowread(0x3BF)&0x40)
{
if(c==1) diff=0;
else diff=1;
goto cs;
}
else if(_rowread(0x2FF)&0x40)
goto ms;
}
//--------------->Sélection voiture<--------------
cs:
ClearGrayScreen();
FontSetSys(F_8x10);
DrawStr(80,6,"SELECT CAR",A_NORMAL);
FontSetSys(F_6x8);
DrawStr(20,90,"PEUGEOT 306",A_NORMAL);//20->86
DrawStr(70,110,"MITSUBISHI LANCER",A_NORMAL);//70->172
DrawStr(145,90,"SUBARU IMPREZA",A_NORMAL);//145->229
Sprite8_XOR(12,89,8,dte,GetPlane(1));//> peugeot <
Sprite8_XOR(88,89,8,gche,GetPlane(1));
title();
fp = fopen("vrdtcar","rb");
fread(car.l,12,32,fp);
fseek(fp,(32*4*15),SEEK_SET);
fread(car.g1l,12,32,fp);
fseek(fp,2*32*4*15,SEEK_SET);
fread(car.d1l,12,32,fp);
fclose(fp);
Sprite32(39,48,32,car.m,GetPlane(0),A_NORMAL);
Sprite32_XOR(39,48,32,car.m,GetPlane(0));
Sprite32_XOR(40,49,32,car.l,GetPlane(0));
Sprite32_XOR(40,49,32,car.d,GetPlane(1));
Sprite32 (171,49,32,car.d1m,GetPlane(0),A_NORMAL);
Sprite32_XOR(171,49,32,car.d1m,GetPlane(0));
Sprite32_XOR(172,50,32,car.d1l,GetPlane(0));
Sprite32_XOR(172,50,32,car.d1d,GetPlane(1));
Sprite32 (104,69,32,car.g1m,GetPlane(0),A_NORMAL);
Sprite32_XOR(104,69,32,car.g1m,GetPlane(0));
Sprite32_XOR(105,70,32,car.g1l,GetPlane(0));
Sprite32_XOR(105,70,32,car.g1d,GetPlane(1));
c=1;
while((_rowread(0x3BF)&0x40)||(_rowread(0x2FF)&0x40)){}
while(1)
{
if((_rowread(0x3FE)&0x40)&&c==1)
{
c=2;
Sprite8_XOR(12,89,8,dte,GetPlane(1));//> peugeot <
Sprite8_XOR(88,89,8,gche,GetPlane(1));
Sprite8_XOR(62,109,8,dte,GetPlane(1));//> lancer <
Sprite8_XOR(174,109,8,gche,GetPlane(1));
while(_rowread(0x3FE)&0x40){}
}
else if((_rowread(0x3FE)&0x40)&&c==2)
{
c=3;
Sprite8_XOR(62,109,8,dte,GetPlane(1));//> lancer <
Sprite8_XOR(174,109,8,gche,GetPlane(1));
Sprite8_XOR(137,89,8,dte,GetPlane(1));//> subaru <
Sprite8_XOR(231,89,8,gche,GetPlane(1));
while(_rowread(0x3FE)&0x40){}
}
else if((_rowread(0x3FE)&0x10)&&c==3)
{
c=2;
Sprite8_XOR(137,89,8,dte,GetPlane(1));//> subaru <
Sprite8_XOR(231,89,8,gche,GetPlane(1));
Sprite8_XOR(62,109,8,dte,GetPlane(1));//> lancer <
Sprite8_XOR(174,109,8,gche,GetPlane(1));
while(_rowread(0x3FE)&0x10){}
}
else if((_rowread(0x3FE)&0x10)&&c==2)
{
c=1;
Sprite8_XOR(62,109,8,dte,GetPlane(1));//> lancer <
Sprite8_XOR(174,109,8,gche,GetPlane(1));
Sprite8_XOR(12,89,8,dte,GetPlane(1));//> peugeot <
Sprite8_XOR(88,89,8,gche,GetPlane(1));
while(_rowread(0x3FE)&0x10){}
}
else if(_rowread(0x3BF)&0x40)
{
fp = fopen("vrdtcar","rb");
fseek(fp,(c-1)*1920/*(32*4*15)*/,SEEK_SET);
fread(&car,4,480,fp);
fclose(fp);
if(gm==2)
goto ts;
else
{
sr=1;
goto tsc;
}
}
else if(_rowread(0x2FF)&0x40)
goto ds;
}
//--------------->Sélection course<--------------
ts:
ClearGrayScreen();
title();
FontSetSys(F_8x10);
DrawStr(75,6,"SELECT TRACK",A_NORMAL);
Sprite32_XOR(103,46,32,drap,GetPlane(1));
Sprite32_OR(103,46,32,drap,GetPlane(0));
Sprite8_XOR(60,91,8,gche,GetPlane(0));
Sprite8_XOR(168,91,8,dte,GetPlane(0));
Sprite8_XOR(168,91,8,dte,GetPlane(1));
DrawStr(90,90,"Corsica",A_NORMAL);
c=1;
while(_rowread(0x3BF)&0x40){}
while(1)
{
if(((_rowread(0x3FE)&0x40)&&c==1)||((_rowread(0x3FE)&0x10)&&c==3))
{
c=2;
Sprite8_OR(60,91,8,gche,GetPlane(1));
DrawStr(78,90," Safari ",A_REPLACE);
while((_rowread(0x3FE)&0x40)||(_rowread(0x3FE)&0x10)){}
}
else if(((_rowread(0x3FE)&0x40)&&c==2)||((_rowread(0x3FE)&0x10)&&c==4))
{
c=3;
DrawStr(78,90," Argentina",A_REPLACE);
while((_rowread(0x3FE)&0x40)||(_rowread(0x3FE)&0x10)){}
}
else if(((_rowread(0x3FE)&0x10)&&c==5)||((_rowread(0x3FE)&0x40)&&c==3))
{
c=4;
Sprite8_OR(168,91,8,dte,GetPlane(1));
DrawStr(78,90,"City Night",A_REPLACE);
while((_rowread(0x3FE)&0x40)||(_rowread(0x3FE)&0x10)){}
}
else if((_rowread(0x3FE)&0x40)&&c==4)
{
c=5;
Sprite8_XOR(168,91,8,dte,GetPlane(1));
DrawStr(78,90," Sweden ",A_REPLACE);
while(_rowread(0x3FE)&0x40){}
}
else if((_rowread(0x3FE)&0x10)&&c==2)
{
c=1;
Sprite8_XOR(60,91,8,gche,GetPlane(1));
DrawStr(78,90," Corsica ",A_REPLACE);
while(_rowread(0x3FE)&0x10){}
}
else if(_rowread(0x2FF)&0x40)
goto cs;
else if(_rowread(0x3BF)&0x40)
{
tsc:
if(gm==3||gm==1)
{
if(sr==1)
c=1;
else if(sr==2)
c=3;
else if(sr==3)
c=5;
else if(sr==4)
c=2;
else if(sr==5)
c=4;
}
fp = fopen("vrdtdec","rb");
fseek(fp,(c-1)*(31*4*8+32*4*8),SEEK_SET);
memset(dec,0,1920);
for(i=0;i<=7;i++)
{
fread(dbuf,4,31,fp);
Sprite32_XOR(32*i,0,31,(unsigned long*)dbuf,dec);
}
for(i=0;i<=7;i++)
{
fread(dbuf,4,32,fp);
Sprite32_XOR(32*i,31,32,(unsigned long*)dbuf,dec);
}
makedec2();
fclose(fp);
switch(c)
{
case 1:
cor();
sprintf(course,"Corsica");
break;
case 2:
saf();
sprintf(course,"Safari");
break;
case 3:
arg();
sprintf(course,"Argentina");
break;
case 4:
cit();
sprintf(course,"City Night");
break;
case 5:
swe();
sprintf(course,"Sweden");
break;
}
if(gm==3||gm==1)
{
ClearGrayScreen();
title();
FontSetSys(F_8x10);
if(gm==3)
DrawStr(45,6,"V-RALLY CHAMPIONSHIP",A_NORMAL);
if(gm==1)
DrawStr(50,6,"V-RALLY CHALLENGE",A_NORMAL);
Sprite32_XOR(83,46,32,drap,GetPlane(1));
Sprite32_OR(83,46,32,drap,GetPlane(0));
sprintf(srbuf,"%d/5",sr);
DrawStr(140,50,srbuf,A_NORMAL);
DrawStr(120,66,course,A_NORMAL);
wait(40);
}
goto game;
}
}
///////////////////////////Jeu///////////////////////////
//***********Initialisation jeu**************
game:
ClearGrayScreen();
xc=105;
pen=0;
pl=0;
carst=0;
r=0;
ch=0;
cycle=0;
rst=1;
xd=0;
dd=0;
vst=0;
ob=1;
xp=0;
ty=1;
ot=0;
wsu=0;
spd=0;
av=0;
cv=0;
cxd=0;
mil=0;
min=0;
rc=0;
sec=0;
xpf=0;
obf=1;
er=0;
col=0;
cf=0;
er2=0;
vibr=0;
vibr2=0;
i=0;
depl=-2;
rang=tot;
for(i=0;i<5;i++)
{
adv[i].dist=3141-(i*780);
adv[i].place=i+1;
adv[i].val=i+1;
}
sprintf(buff,"%d",rang);
sprintf(buffer,"%02d : %02d : %02d",min,sec,mil);
PortSet(virtuel2,239,127);
ClrScr();
Sprite32_XOR(0,107,20,b1,virtuel2);
Sprite32_XOR(32,107,20,b2,virtuel2);
Sprite32_XOR(64,107,20,b3,virtuel2);
Sprite32_XOR(96,107,20,b4,virtuel2);
Sprite32_XOR(128,107,20,b5,virtuel2);
Sprite32_XOR(160,107,20,b6,virtuel2);
Sprite32_XOR(192,107,20,b7,virtuel2);
Sprite32_XOR(224,107,20,b8,virtuel2);
FontSetSys(F_4x6);
DrawStr(22,111,": ",A_REPLACE);
DrawStr(28,111,buffer,A_REPLACE);
FontSetSys(F_8x10);
DrawStr(135,112,buff,A_REPLACE);
PortSet(virtuel,239,127);
ClrScr();
Sprite32_XOR(0,107,20,bd1,virtuel);
Sprite32_XOR(32,107,20,bd2,virtuel);
Sprite32_XOR(64,107,20,bd3,virtuel);
Sprite32_XOR(96,107,20,bd4,virtuel);
Sprite32_XOR(128,107,20,bd5,virtuel);
Sprite32_XOR(160,107,20,bd6,virtuel);
Sprite32_XOR(192,107,20,bd7,virtuel);
Sprite32_XOR(224,107,20,bd8,virtuel);
FontSetSys(F_4x6);
DrawStr(22,111,": ",A_REPLACE);
DrawLine(0,62,239,62,A_NORMAL);
DrawLine(0,63,239,63,A_NORMAL);
DrawLine(0,64,239,64,A_NORMAL);
DrawLine(0,0,239,0,A_NORMAL);
DrawLine(0,1,239,1,A_NORMAL);
decor(0);
for(i=0;i<7;i++)
{
DrawLine(0,65+i,239,65+i,A_NORMAL);
}
for(i=0;i<7;i++)
{
DrawLine(0,79+i,239,79+i,A_NORMAL);
}
for(i=0;i<7;i++)
{
DrawLine(0,93+i,239,93+i,A_NORMAL);
}
norm1();
norm2();
norm3();
for(i=0;i<24;i++)
{
Sprite8_XOR(6+(i*3),121,2,squ,virtuel);
Sprite8_XOR(6+(i*3),121,2,squ,virtuel2);
}
Sprite16_XOR(80,113,10,cle,virtuel);
Sprite16_XOR(80,113,10,cle,virtuel2);
Sprite8_XOR(162,120,3,sp1,virtuel);
Sprite8_XOR(167,119,4,sp2,virtuel);
Sprite8_XOR(173,118,5,sp3,virtuel);
Sprite8_XOR(180,117,6,sp4,virtuel);
Sprite8_XOR(188,116,7,sp5,virtuel);
Sprite8_XOR(196,115,8,sp6,virtuel);
Sprite16_XOR(203,114,9,sp7,virtuel);
Sprite16_XOR(211,113,10,sp8,virtuel);
Sprite16_XOR(218,112,11,sp9,virtuel);
Sprite16_XOR(226,111,12,sp10,virtuel);
FastCopyScreen(virtuel,virt);
FastCopyScreen(virtuel2,virt2);
PortSet(virt2,239,127);
FontSetSys(F_8x10);
DrawStr(135,112,buff,A_REPLACE);
PortSet(virtuel,239,127);
FastCopyScreen(virt,virtf);
FastCopyScreen(virt2,virt2f);
if(tot==6)
asgb2(105,33+42-adv[rang-2].dist,opp2l,opp2d,opp2m);
asg(xc,80,car.l,car.d,car.m);
FastCopyScreen(virtf,GetPlane(0));
FastCopyScreen(virt2f,GetPlane(1));
SetPlane(DARK_PLANE);
DrawStr(90,25,"READY ???",A_NORMAL);
rec();
DrawStr(115,25,"3",A_NORMAL);
rec();
DrawStr(115,25,"2",A_NORMAL);
rec();
DrawStr(115,25,"1",A_NORMAL);
rec();
DrawStr(95,25,"GO !!!",A_NORMAL);
rec();
FontSetSys(F_4x6);
PortSet(virtuel,239,127);
//*************Boucle jeu*****************
{
GAME_LOOP:
//------------>Chrono<-------------
if(rc<10)
rc++;
else
{
rc=0;
if(mil==80)
{
mil=0;
sec++;
}
else
mil+=20;
if(sec==60)
{
sec=0;
min++;
}
if(wsu<12)
{
wait(4);
}
sprintf(buffer,"%02d : %02d : %02d",min,sec,mil);
PortSet(virt2,239,127);
DrawStr(28,111,buffer,A_REPLACE);
PortSet(virtuel2,239,127);
DrawStr(28,111,buffer,A_REPLACE);
PortSet(virtuel,239,127);
}
//----------->affichage lignes<-----------
if(av>49)
{
while(i<2)
{
HLineByte(0,239,65+r,virtuel); //routine de ligne carrement plus rapides!
HLineByte(0,239,79+r,virtuel);
HLineByte(0,239,93+r,virtuel);
HLineByte(0,239,72+r,virtuel);
HLineByte(0,239,86+r,virtuel);
if(r<7)
HLineByte(0,239,100+r,virtuel);
else
HLineByte(0,239,58+r,virtuel);
if(r==13)
r=0;
else
r++;
i++;
}
i=0;
//--------->affichage route<----------
if(ch==0)
{
h=rand();
if(h<350)
{
ch=1;
vir=1;
}
else if(h<1000)
{
ch=1;
vir=2;
}
}
else
{
if(cycle==0)
{
if(rst==1)
{
norm1();
if(vir==1)
vir1();
else
vir1b();
cycle=43;
}
else if(rst==2)
{
norm2();
if(vir==1)
vir2();
else
vir2b();
cycle=43;
}
else if(rst==3)
{
norm3();
if(vir==1)
vir3();
else
vir3b();
cycle=1;
dd=1;
}
else if(rst==4)
{
if(vir==1)
vir1();
else
vir1b();
norm1();
cycle=43;
}
else if(rst==5)
{
if(vir==1)
vir2();
else
vir2b();
norm2();
cycle=43;
}
else
{
if(vir==1)
vir3();
else
vir3b();
norm3();
ch=0;
dd=0;
}
if(rst==5)
rst=0;
else
rst++;
}
else if(cycle>48)
cycle=0;
else
cycle+=2;
}
//-------->scrolling décor<---------
if(dd==1)
{
if(!vst)
{
if(vir==1)
{
if(xd==0)
xd=236;
else
xd-=4;
}
else
{
if(xd==240)
xd=4;
else
xd+=4;
}
decor(xd);
vst=1;
}
else
vst=0;
if(cxd==1)
{
if(pl==1)
{
if(wsu>27)
plpl=1;
pl=0;
}
else
pl=1;
if(vir==1&&xc>30)
xc-=cv+plpl;
else if(vir==2&&xc<180)
xc+=cv+plpl;
plpl=0;
cxd=0;
}
else
cxd=1;
}
FastCopyScreen(virtuel,virt);
FastCopyScreen(virtuel2,virt2);
//----------->Obstacles secondaires<--------------
xp++;
if(ob<11)
{
if(ty==1)
asgxt(40-xp,33+ob,bu1l,bu1d,bu1m);
else if(ty==2)
asgxt(40-xp,33+ob,tr1l,tr1d,tr1m);
else
asgxt(40-xp,33+ob,br1l,br1d,br1m);
}
else if(ob<26)
{
if(ty==1)
asgxt(40-xp,33+ob,bu2l,bu2d,bu2m);
else if(ty==2)
asgxt(40-xp,33+ob,tr2l,tr2d,tr2m);
else
asgxt(40-xp,33+ob,br2l,br2d,br2m);
}
else if(ob<43)
{
if(ty==1)
{
asgxt(40-xp,33+ob,bu3l,bu3d,bu3m);
if(ob>31&&xc<66-xp)
{
carst=3;
col=cv+1;
if(wsu>47)
wsu-=26;
}
}
else if(ty==2)
{
asgxt(40-xp,33+ob,tr3al,tr3ad,tr3am);
asgxt(40-xp,1+ob,tr3bl,tr3bd,tr3bm);
if(ob>31&&xc<64-xp)
{
carst=3;
col=cv+1;
if(wsu>47)
wsu-=26;
}
}
else
{
asgxt(40-xp,33+ob,br3l,br3d,br3m);
if(ob>31&&xc<64-xp)
{
carst=3;
col=cv+1;
if(wsu>47)
wsu-=26;
}
}
}
else if(ob<53)
{
if(ty==1)
asgxt(148+xp,ob-9,br1l,br1d,br1m);
else if(ty==2)
asgxt(148+xp,ob-9,bu1l,bu1d,bu1m);
else
asgxt(148+xp,ob-9,tr1l,tr1d,tr1m);
}
else if(ob<68)
{
if(ty==1)
asgxt(148+xp,ob-9,br2l,br2d,br2m);
else if(ty==2)
asgxt(148+xp,ob-9,bu2l,bu2d,bu2m);
else
asgxt(148+xp,ob-9,tr2l,tr2d,tr2m);
}
else
{
if(ty==1)
{
asgxt(148+xp,ob-9,br3l,br3d,br3m);
if(ob>31&&xc>124+xp)
{
carst=4;
col=cv+1;
if(wsu>47)
wsu-=26;
}
}
else if(ty==2)
{
asgxt(148+xp,ob-9,bu3l,bu3d,bu3m);
if(ob>31&&xc>122+xp)
{
carst=4;
col=cv+1;
if(wsu>47)
wsu-=26;
}
}
else
{
asgxt(148+xp,ob-9,tr3al,tr3ad,tr3am);
asgxt(148+xp,ob-41,tr3bl,tr3bd,tr3bm);
if(ob>31&&xc>124+xp)
{
carst=4;
col=cv+1;
if(wsu>47)
wsu-=26;
}
}
}
if(ob!=83)
ob+=2;
else
{
ob=1;
xp=0;
if(ty<3)
ty++;
else
{
ty=1;
// *** Incrémentation rebours fin course *** //
if(er<35)
er++;
}
}
//---------->Obstacles route<-----------
if(ot==0)
{
h=rand();
if(h<330)
{
if(er2==0)
ot=1;
}
else if(h<660)
{
if(er2==0)
ot=2;
}
else if(h<1000)
{
if(er2==0)
ot=3;
}
obb=1;
xpb=0;
}
else
{
xpb++;
if(ot==1)
{
if(obb<11)
asgb(82-xpb,33+obb,ro1l,ro1d,ro1m);
else if(obb<26)
asgint(82-xpb,33+obb,ro2l,ro2d,ro2m);
else
{
asgint(82-xpb,33+obb,ro3l,ro3d,ro3m);
if(ob>31&&(54-xpb<xc&&xc<83-xpb))
{
carst=4;
col=cv+1;
if(wsu>47)
wsu-=26;
}
else if(ob>31&&(81-xpb<xc&&xc<110-xpb))
{
carst=3;
col=cv+1;
if(wsu>47)
wsu-=26;
}
}
}
else if(ot==2)
{
if(obb<11)
asgb(126+xpb,33+obb,ro1l,ro1d,ro1m);
else if(obb<26)
asgint(126+xpb,33+obb,ro2l,ro2d,ro2m);
else
{
asgint(126+xpb,33+obb,ro3l,ro3d,ro3m);
if(ob>31&&(98+xpb<xc&&xc<127+xpb))
{
carst=4;
col=cv+1;
if(wsu>47)
wsu-=26;
}
else if(ob>31&&(125+xpb<xc&&xc<154+xpb))
{
carst=3;
col=cv+1;
if(wsu>47)
wsu-=26;
}
}
}
else
{
if(obb<11)
asgb(105,33+obb,ro1l,ro1d,ro1m);
else if(obb<26)
asgint(105,33+obb,ro2l,ro2d,ro2m);
else
{
asgint(105,33+obb,ro3l,ro3d,ro3m);
if(ob>31&&(77<xc&&xc<106))
{
carst=4;
col=cv+1;
if(wsu>47)
wsu-=26;
}
else if(ob>31&&(104<xc&&xc<133))
{
carst=3;
col=cv+1;
if(wsu>47)
wsu-=26;
}
}
}
if(obb!=41)
obb+=2;
else
ot=0;
}
//------------->Borne Fin<---------------
if(er==35)
er2+=2;
if(er2>49)
{
xpf++;
if(obf<11)
{
asgb(59-xpf,33+obf,end1l,end1d,end1m);
asgb(151+xpf,33+obf,end1l,end1d,end1m);
}
else if(obf<26)
{
asgxt(59-xpf,33+obf,end2l,end2d,end2m);
asgxt(151+xpf,33+obf,end2l,end2d,end2m);
}
else
{
asgxt(59-xpf,33+obf,end3l,end3d,end3m);
asgxt(151+xpf,33+obf,end3l,end3d,end3m);
}
if(obf!=43)
obf+=2;
}
//------------>Vibration<-----------------
if(vibr2==4)
{
if(vibr==0)
vibr=1;
else
vibr=0;
vibr2=0;
}
else
vibr2++;
}
FastCopyScreen(virt,virtf);
FastCopyScreen(virt2,virt2f);
//------------>Concurrents<-------------------
adv[0].dist+=depl;
adv[1].dist+=depl;
adv[2].dist+=depl;
adv[3].dist+=depl;
adv[4].dist+=depl;
if (adv[0].dist>32000)
{
SetPlane(DARK_PLANE);
FontSetSys(F_8x10);
DrawStr(80,10,"RACE ENDED",A_NORMAL);
wait(25);
ClearGrayScreen();
title();
DrawStr(15,30,"HEY ! WAKE UP ! THE RACE'S",A_NORMAL);
DrawStr(20,45,"BEEN ENDED WITHOUT YOU !",A_NORMAL);
DrawStr(35,110,"Press [F1] to continue",A_NORMAL);
while(1)
{
if(_rowread(0x3BF)&0x10)
goto menu;
}
}
//concurrent devant
if(rang>1&&42-adv[rang-2].dist<43&&42-adv[rang-2].dist>0&&adv[rang-2].place<tot)
{
if(42-adv[rang-2].dist<11)
asgb2(105,33+42-adv[rang-2].dist,opp1l,opp1d,opp1m);
else if(42-adv[rang-2].dist<26)
asgb2(105,33+42-adv[rang-2].dist,opp2l,opp2d,opp2m);
else
{
asgb2(105,33+42-adv[rang-2].dist,opp3l,opp3d,opp3m);
if(ob>31&&(77<xc&&xc<106))
{
carst=4;
col=cv+1;
if(wsu>47)
wsu-=26;
}
else if(ob>31&&(104<xc&&xc<133))
{
carst=3;
col=cv+1;
if(wsu>47)
wsu-=26;
}
}
}
if(rang>1&&adv[rang-2].dist<0&&adv[rang-2].place<tot)
{
adv[rang-2].place++;
rang--;
FontSetSys(F_8x10);
PortSet(virt2,239,127);
DrawChar(135,112,48+rang,A_REPLACE);
PortSet(virtuel2,239,127);
DrawChar(135,112,48+rang,A_REPLACE);
PortSet(virtuel,239,127);
FontSetSys(F_4x6);
}
// concurrent derriere
if(rang<6&&42-adv[rang-1].dist<43&&42-adv[rang-1].dist>0&&adv[rang-1].val<tot)
{
if(42-adv[rang-1].dist<11)
asgb2(105,33+42-adv[rang-1].dist,opp1l,opp1d,opp1m);
else if(42-adv[rang-1].dist<26)
asgb2(105,33+42-adv[rang-1].dist,opp2l,opp2d,opp2m);
else
{
asgb2(105,33+42-adv[rang-1].dist,opp3l,opp3d,opp3m);
if(ob>31&&(77<xc&&xc<106))
{
carst=4;
col=cv+1;
if(wsu>47)
wsu-=26;
}
else if(ob>31&&(104<xc&&xc<133))
{
carst=3;
col=cv+1;
if(wsu>47)
wsu-=26;
}
}
}
if(rang<6&&adv[rang-1].dist>0&&adv[rang-1].val<tot)
{
adv[rang-1].place--;
rang++;
FontSetSys(F_8x10);
PortSet(virt2,239,127);
DrawChar(135,112,48+rang,A_REPLACE);
PortSet(virtuel2,239,127);
DrawChar(135,112,48+rang,A_REPLACE);
PortSet(virtuel,239,127);
FontSetSys(F_4x6);
}
//------------>Accélération<--------------------
if(_rowread(0x3FE)&0x8) //--acceleration progressive--
{
if(wsu<221)
{
if(wsu<100)
wsu++;
else
if(wsu<150)
wsu+=2;
else
wsu+=3;
}
}
else if(_rowread(0x3BF)&0x10)
{
if(wsu>2)
wsu-=3;
}
else
{
if(wsu>0)
wsu--;
}
///////////////////////
if(diff==1)
{
if(pen>20)
tt=1;
else if(pen>18)
tt=2;
else if(pen>10)
tt=3;
else
tt=0;
//*******
if(tt>0&&ttt>tt-1)
{
if(wsu>100)
wsu--;
ttt=1;
}
else
ttt++;
}
///////////////////////
if((wsu>215))
{
Sprite16_XOR(226,111,12,sp10,virt2f);
av=50;
cv=1;
depl=-1;
}
else
{
if((wsu>183))
{
Sprite16_XOR(218,112,11,sp9,virt2f);
spd=50;
cv=2;
depl=0;
}
else
if((wsu>159))
{
Sprite16_XOR(211,113,10,sp8,virt2f);
spd=25;
cv=2;
depl=0;
}
else
if((wsu>139))
{
Sprite16_XOR(203,114,9,sp7,virt2f);
spd=17;
cv=1;
depl=1;
}
else
if((wsu>115))
{
Sprite8_XOR(196,115,8,sp6,virt2f);
spd=13;
cv=1;
depl=1;
}
else
if((wsu>95))
{
Sprite8_XOR(188,116,7,sp5,virt2f);
spd=10;
cv=1;
depl=2;
}
else
if((wsu>71))
{
Sprite8_XOR(180,117,6,sp4,virt2f);
spd=9;
cv=1;
depl=2;
}
else
if((wsu>47))
{
Sprite8_XOR(173,118,5,sp3,virt2f);
spd=8;
cv=0;
depl=2;
}
else
if((wsu>27))
{
Sprite8_XOR(167,119,4,sp2,virt2f);
spd=7;
cv=0;
depl=3;
}
else
if((wsu>11))
{
Sprite8_XOR(162,120,3,sp1,virt2f);
spd=6;
cv=0;
depl=3;
}
else
{
spd=0;
cv=0;
depl=3;
}
if(av>49)
av=0;
else
av+=spd;
}
if((_rowread(0x3BF)&0x10)&&cv>0)
cf=1;
else
cf=0;
//------------->Ralentissage HP<----------------
if((xc<55||xc>155)&&wsu>139)
wsu-=3;
//------------->Collision<--------------
if(carst==3)
xc++;
else if(carst==4)
xc--;
//------------->Controle voiture<------------
if(carst<3)
{
if((_rowread(0x3FE)&0x10)&&(carst!=1))
{
if(xc>30)
xc=xc-cv+cf;
asgl(xc-9,79-vibr,car.g1l,car.g1d,car.g2l,car.g2d,car.g1m,car.g2m);
carst=2;
}
else if((_rowread(0x3FE)&0x40)&&(carst!=2))
{
if(xc<180)
xc=xc+cv-cf;
asgl(xc,79-vibr,car.d1l,car.d1d,car.d2l,car.d2d,car.d1m,car.d2m);
carst=1;
}
else
{
asg(xc,80-vibr,car.l,car.d,car.m);
carst=0;
}
}
else
{
asg(xc,76,car.l,car.d,car.m);
}
FastCopyScreen(virtf,GetPlane(0));
FastCopyScreen(virt2f,GetPlane(1));
//-------------->Collision bis<------------------
if(carst>2)
{
if(col+2>0)
col--;
else
{
energ();
carst=0;
}
}
//-------------->Teacher Key<----------------
if(_rowread(0x2FF)&0x20)
off();
//-------------->Pause<-------------------
if(_rowread(0x37F)&0x40)
{
SetPlane(DARK_PLANE);
FontSetSys(F_8x10);
DrawStr(95,25,"PAUSED",A_NORMAL);
while(_rowread(0x37F)&0x40){}
while(1)
{
if(_rowread(0x37F)&0x40)
{
while(_rowread(0x37F)&0x40){}
PortSet(virtuel,239,127);
FastCopyScreen(virt2f,GetPlane(1));
FontSetSys(F_4x6);
goto next;
}
//-------------->Controle contraste<------
else if(_rowread(0x2FF)&0x10)
{
OSContrastUp();
while(_rowread(0x2FF)&0x10){}
}
else if(_rowread(0x1FF)&0x1)
{
OSContrastDn();
while(_rowread(0x1FF)&0x1){}
}
wait(1);
}
}
next :
//---------------->Quitation<------------------
if(_rowread(0x2FF)&0x40)
{
SetPlane(DARK_PLANE);
FontSetSys(F_8x10);
DrawStr(10,10,"DO YOU REALLY WANT TO QUIT ?",A_NORMAL);
DrawStr(40,25,"[Y] = OK",A_NORMAL);
DrawStr(130,25,"[ESC] = NO",A_NORMAL);
while(_rowread(0x2FF)&0x40){}
while(1)
{
if(_rowread(0x3DF)&0x8)
goto menu;
if(_rowread(0x2FF)&0x40)
{
while(_rowread(0x2FF)&0x40){}
PortSet(virtuel,239,127);
FastCopyScreen(virt2f,GetPlane(1));
FontSetSys(F_4x6);
goto GAME_LOOP;
}
wait(1);
}
}
if(obf>=43)
goto ftr;
if(pen>24)
goto fgo;
goto GAME_LOOP;
}
//*******************Fins partie********************
fgo:
SetPlane(DARK_PLANE);
FontSetSys(F_8x10);
DrawStr(75,25,"GAME OVER",A_NORMAL);
wait(20);
FastCopyScreen(virt2f,GetPlane(1));
DrawStr(6,10,"YOU'VE DESTROYED YOUR CAR !!!",A_NORMAL);
DrawStr(15,25,"[Y] = RETRY",A_NORMAL);
DrawStr(130,25,"[ESC] = QUIT",A_NORMAL);
while(1)
{
if(_rowread(0x3DF)&0x8)
goto game;
if(_rowread(0x2FF)&0x40)
{
while(_rowread(0x2FF)&0x40){}
goto menu;
}
}
////////////////////////////////////////////////
ftr:
SetPlane(DARK_PLANE);
FontSetSys(F_8x10);
DrawStr(80,10,"RACE ENDED",A_NORMAL);
wait(25);
ClearGrayScreen();
title();
sprintf(buffer,"%02d ' %02d '' %02d",min,sec,mil);
sprintf(buff,"%d",rang);
FontSetSys(F_8x10);
DrawStr(75,6,"RACE RESULTS",A_NORMAL);
FontSetSys(F_6x8);
DrawStr(20,40,"TRACK :",A_REVERSE);
DrawStr(20,60,"PLACE :",A_REVERSE);
DrawStr(20,80,"TIME :",A_REVERSE);
DrawStr(55,110,"Press [F1] to continue",A_NORMAL);
DrawStr(70,40,course,A_NORMAL);
DrawStr(70,60,buff,A_NORMAL);
DrawStr(70,80,buffer,A_NORMAL);
while(1)
{
if(_rowread(0x3BF)&0x10)
{
if(gm==2)
goto menu;
else
goto suite;
}
}
//***************fin challenge*********************
suite:
while(_rowread(0x3BF)&0x10){}
if(gm==1)
{
if(rang==tot)
{
ClearGrayScreen();
title();
FontSetSys(F_8x10);
DrawStr(6,35,"GAME OVER : YOU FINISHED LAST",A_NORMAL);
FontSetSys(F_6x8);
DrawStr(55,110,"Press [F1] to continue",A_NORMAL);
while(1)
{
if(_rowread(0x3BF)&0x10)
goto menu;
}
}
else
{
tot--;
ClearGrayScreen();
title();
FontSetSys(F_8x10);
DrawStr(6,35,"YEAH ! YOU'RE ON NEXT ROUND !",A_NORMAL);
FontSetSys(F_6x8);
DrawStr(55,110,"Press [F1] to continue",A_NORMAL);
while(1)
{
if(_rowread(0x3BF)&0x10)
{
if(sr<5)
{
sr++;
goto tsc;
}
else
{
while(_rowread(0x3BF)&0x10){}
ClearGrayScreen();
title();
Sprite32_XOR(5,60,32,laur,GetPlane(1));
Sprite32_OR(5,60,32,laur,GetPlane(0));
Sprite32_XOR(205,60,32,laur,GetPlane(1));
Sprite32_OR(205,60,32,laur,GetPlane(0));
FontSetSys(F_8x10);
DrawStr(20,20,"HU ? NO MORE OPPONENTS ?",A_NORMAL);
DrawStr(10,45,"CONGRATULATIONS, YOU'RE THE",A_NORMAL);
DrawStr(90,75,"WINNER !!!",A_NORMAL);
FontSetSys(F_6x8);
DrawStr(55,110,"Press [F1] to continue",A_NORMAL);
while(1)
{
if(_rowread(0x3BF)&0x10)
goto menu;
}
}
}
}
}
}
//*************fin championship***************
if(gm==3)
{
for(i=0;i<5;i++)
{
if(adv[i].place==1)
adv[i].pts+=20;
else if(adv[i].place==2)
adv[i].pts+=15;
else if(adv[i].place==3)
adv[i].pts+=10;
else if(adv[i].place==4)
adv[i].pts+=5;
else if(adv[i].place==5)
adv[i].pts+=1;
}
if(rang==1)
rp=20;
else if(rang==2)
rp=15;
else if(rang==3)
rp=10;
else if(rang==4)
rp=5;
else if(rang==5)
rp=1;
tp+=rp;
cp=1;
for(i=0;i<5;i++)
{
if(adv[i].pts-tp>=0)
cp++;
}
ClearGrayScreen();
title();
FontSetSys(F_8x10);
sprintf(rpbuf,"%02d",rp);
sprintf(tpbuf,"%02d",tp);
sprintf(cpbuf,"%02d",cp);
DrawStr(75,6,"RACE RESULTS",A_NORMAL);
FontSetSys(F_6x8);
DrawStr(20,40,"RACE POINTS :",A_REVERSE);
DrawStr(20,60,"TOTAL POINTS :",A_REVERSE);
DrawStr(20,80,"CURRENT POSITION :",A_REVERSE);
DrawStr(150,40,rpbuf,A_NORMAL);
DrawStr(150,60,tpbuf,A_NORMAL);
DrawStr(150,80,cpbuf,A_NORMAL);
DrawStr(55,110,"Press [F1] to continue",A_NORMAL);
while(1)
{
if(_rowread(0x3BF)&0x10)
{
if(sr<5)
{
sr++;
goto tsc;
}
else
{
while(_rowread(0x3BF)&0x10){}
ClearGrayScreen();
title();
Sprite32_XOR(5,40,32,laur,GetPlane(1));
Sprite32_OR(5,40,32,laur,GetPlane(0));
Sprite32_XOR(205,40,32,laur,GetPlane(1));
Sprite32_OR(205,40,32,laur,GetPlane(0));
FontSetSys(F_8x10);
DrawStr(35,6,"CHAMPIONSHIP RESULTS",A_NORMAL);
FontSetSys(F_6x8);
DrawStr(50,50,"YOU FINISHED AT PLACE :",A_REVERSE);
DrawStr(110,70,cpbuf,A_NORMAL);
DrawStr(55,110,"Press [F1] to continue",A_NORMAL);
while(1)
{
if(_rowread(0x3BF)&0x10)
goto menu;
}
}
}
}
}
//*******************Fin Jeu*******************
fin:
SetPlane(0);
GrayOff();
SetIntVec(AUTO_INT_6,autoint_bkp);
SetIntVec(AUTO_INT_1, save_int_1);
SetIntVec(AUTO_INT_5, save_int_5);
//tous les pointeurs secondaires à NULL
virtuel=NULL;
virtuel2=NULL;
virt=NULL;
virt2=NULL;
virtf=NULL;
virt2f=NULL;
dbuf=NULL;
dec=NULL;
//liberer la memoire
free(ALL);
}