123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301 |
- // 3D pitch test 30/9/94
- extern "C" int icth,isth;
- #include <conio.h>
- #include <i86.h>
- #include <stdlib.h>
- #include <bios.h>
- #include <stdio.h>
- #include <math.h>
- #include <string.h>
- #include "defines.h"
- #include "externs.h"
- #include "mouse.h"
- #include "3deng.h"
- #include "data.h"
- #include "front.h"
- #include "eurofrnt\euro_int.h"
- #include "audio.h"
- int norm_font_col=157;
- extern team_info game_data[];
- extern setup_info setup;
- extern "C" volatile int ux1,ux2,wptr,rptr;
- extern int vidi_anim;
- extern word scrmode;
- extern int draw_string(buff_info *buff,int font_no,int x,int y,char *string,unsigned char col,short just);
- extern "C" short wConsoleNode;
- extern float log_factor;
- int counter=0;
- struct joy_struct {
- unsigned short x1;
- unsigned short y1;
- unsigned short x2;
- unsigned short y2;
- unsigned short sw;
- };
- extern joy_struct joy_pos;
- float wayne_cam[2];
- float set_camera_dist=260;
- float set_camera_height=100;
- char camera_fixed=0;
- extern void init_off_int(match_player *player);
- ////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////
- extern void get_face_xy(int d,float &x,float &y);
- ////////////////////////////////////////////////////////////
- //// SCREEN PRIMITIVES
- //
- void
- grmode(int md)
- {
- union REGS r;
- r.h.al=md;
- r.h.ah=0;
- int386(0x10,&r,&r);
- }
- void
- vbl()
- {
- while(((inp(0x3da))&8)!=0);
- while(((inp(0x3da))&8)==0);
- }
- ////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////
- extern stad_info stadlist[];
- float st_hm=360;
- plyrdat *poswr,pos[ncb];
- plyrdat *rep;
- filter filters[32];
- float spr_coord_tab[MAX_3D_SPRS*3+1];
- short spr_ref_tab[MAX_3D_SPRS];
- float null_tab[1]={0};
- short null2[1]={0};
- plyrdat coords_tab1[ncb];
- plyrdat coords_tab2[ncb];
- plyrdat *replay_tab;
- plyrdat *new_coords=coords_tab1;
- plyrdat *old_coords=coords_tab2;
- datapt tx,ty,tz,camera_x,camera_y,camera_z;
- int play_cam=1;
- datapt old_tx=pitch_len/2;
- datapt old_ty=pitch_wid/2;
- datapt old_tz=0;
- datapt old_camx=0;
- datapt old_camy=0;
- datapt old_camz=0;
- datapt cxs=0;
- datapt cys=0;
- datapt czs=0;
- datapt txs=0;
- datapt tys=0;
- datapt tzs=0;
- datapt prev_camx=0;
- datapt prev_camy=0;
- datapt prev_camz=0;
- float old_scale=INIT_SCALE;
- float css=0;
- float scale=INIT_SCALE;
- char prev_camera;
- short mode_change=0;
- const float camera_inertia=0.05;
- const float target_inertia=0.125;
- extern setup_info setup;
- extern match_data match_info;
- extern buff_info main_buff;
- extern buff_info vidi_buff;
- extern void options(buff_info *buffer,datapt viewx,datapt viewy,datapt viewz,datapt targx,datapt targy,
- datapt targz,datapt vdist,plyrdat *plyrtb,datapt *xyz_ptr,word *ref_ptr,int,int);
- extern void substitution(buff_info *buffer,datapt viewx,datapt viewy,datapt viewz,datapt targx,datapt targy,
- datapt targz,datapt vdist,plyrdat *plyrtb,datapt *xyz_ptr,word *ref_ptr,int);
- extern void switch_coords();
- ////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////
- int init_3d()
- {
- // grmode(19);
- // grmode(0x61);
- prev_camera=camera;
- mode_change=0;
- camera_dist=280;
- // Make sure vectors are corrected...
- new_update_coords(); // Initialize old tab...
- new_update_coords(); // Initialize old tab...
- return(init3d());
- }
- ////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////
- // FUNCTIONS CALLED FROM IN-GAME MENUS... //
- ////////////////////////////////////////////
- /******************************************************************************
- *****************************************************************************/
- void setup_replay()
- {
- rep_camera=camera;
- if (camera==15)
- camera=old_cam;
- }
- /******************************************************************************
- *****************************************************************************/
- void reset_replay()
- {
- camera=rep_camera;
- }
- /******************************************************************************
- *****************************************************************************/
- void sub_player(short t,short p,short s)
- {
- p+=11*(t^(match_half&1));
- player_being_subbed=p+1;
- player_on_off=p+1;
- player_coming_on=s+1;
- init_off_int(&teams[p]);
- if (p>10)
- PlaySubstitutionMessage(team_b,p-11,s,FALSE);
- else
- PlaySubstitutionMessage(team_a,p,s,FALSE);
- }
- /******************************************************************************
- *****************************************************************************/
- void do_replay_render3d(float s)
- {
- s+=(float)replay_pos/REAL_SPEED;
- if (s>=replay_seconds)
- s-=replay_seconds;
- int is1=(int)(s*REAL_SPEED);
- plyrdat *rep1=&replay_tab[is1*ncb]; // Replay Frame...
- int is2=(int)(s*REAL_SPEED)+1;
- if (is2>=replay_seconds*REAL_SPEED)
- is2-=replay_seconds*REAL_SPEED;
- plyrdat *rep2=&replay_tab[is2*ncb]; // Replay Frame...
- memcpy(old_coords,rep1,sizeof(plyrdat)*ncb);
- memcpy(new_coords,rep2,sizeof(plyrdat)*ncb);
- mf_scale=s*REAL_SPEED-is1;
- realtime_coords();
- replay_cnt=TRUE;
- update_3d();
- replay_cnt=FALSE;
- }
- /******************************************************************************
- *****************************************************************************/
- void process_replay()
- {
- if (++replay_pos>=replay_seconds*REAL_SPEED)
- replay_pos=0;
- }
- /******************************************************************************
- *****************************************************************************/
- void plr_comments()
- {
- plyrdat *ptr=pos;
- for (int i=0; i<players; i++)
- {
- if (teams[i].guy_on)
- {
- if (teams[i].tm_comm>0)
- {
- init_speech(i+1,teams[i].tm_comm,4);
- }
- }
- }
- }
- /******************************************************************************
- *****************************************************************************/
- void process_pitch_sprs()
- {
- plr_comments();
- }
- /******************************************************************************
- *****************************************************************************/
- void init_replay()
- {
- // Fill all replay buffer with current coords etc...
- allow_replay=TRUE;
- plyrdat *dest=replay_tab;
- plyrdat *src=pos;
- short reps,n;
- for (reps=0; reps<replay_seconds*20; reps++)
- {
- for (short i=0; i<ncb; i++)
- {
- memcpy(dest++,src++,sizeof(plyrdat));
- }
- src-=ncb;
- }
- }
- /******************************************************************************
- *****************************************************************************/
- void draw_string_center(int x,int y,char *st,buff_info *buff)
- {
- if (scrmode==0x13)
- // Low res...
- draw_string(buff,1,x,y,st,norm_font_col,2);
- else
- // Higher res...
- draw_string(buff,2,x,y,st,norm_font_col,2);
- }
- /******************************************************************************
- *****************************************************************************/
- void draw_string_left(int x,int y,char *st,buff_info *buff)
- {
- if (scrmode==0x13)
- // Low res...
- draw_string(buff,1,x,y,st,norm_font_col,0);
- else
- // Higher res...
- draw_string(buff,2,x,y,st,norm_font_col,0);
- }
- /******************************************************************************
- *****************************************************************************/
- void draw_string_right(int x,int y,char *st,buff_info *buff)
- {
- if (scrmode==0x13)
- // Low res...
- draw_string(buff,1,x,y,st,norm_font_col,1);
- else
- // Higher res...
- draw_string(buff,2,x,y,st,norm_font_col,1);
- }
- /******************************************************************************
- *****************************************************************************/
- void set_normal_color(int c)
- {
- norm_font_col=c;
- }
- /******************************************************************************
- *****************************************************************************/
- void extra_info()
- {
- char info_str_a[16];
- char info_str_b[16];
- for (short p=0; p<11; p++)
- {
- switch(xinfo)
- {
- case(1):
- sprintf(info_str_a,"SPD. %d. %d",(p+1),teams[p].tm_rate);
- sprintf(info_str_b,"SPD. %d. %d",(p+11),teams[p+11].tm_rate);
- break;
-
- case(2):
- sprintf(info_str_a,"POW. %d. %d",(p+1),teams[p].tm_pow);
- sprintf(info_str_b,"POW. %d. %d",(p+11),teams[p+11].tm_pow);
- break;
- case(3):
- sprintf(info_str_a,"CON. %d. %d",(p+1),teams[p].tm_cont);
- sprintf(info_str_b,"CON. %d. %d",(p+11),teams[p+11].tm_cont);
- break;
- case(4):
- sprintf(info_str_a,"FLR. %d. %d",(p+1),teams[p].tm_flair);
- sprintf(info_str_b,"FLR. %d. %d",(p+11),teams[p+11].tm_flair);
- break;
- case(5):
- sprintf(info_str_a,"VIS. %d. %d",(p+1),teams[p].tm_vis);
- sprintf(info_str_b,"VIS. %d. %d",(p+11),teams[p+11].tm_vis);
- break;
- case(6):
- sprintf(info_str_a,"ACC. %d. %d",(p+1),teams[p].tm_ac);
- sprintf(info_str_b,"ACC. %d. %d",(p+11),teams[p+11].tm_ac);
- break;
- case(7):
- sprintf(info_str_a,"STM. %d. %d",(p+1),teams[p].tm_stam);
- sprintf(info_str_b,"STM. %d. %d",(p+11),teams[p+11].tm_stam);
- break;
- case(8):
- sprintf(info_str_a,"DIS. %d. %d",(p+1),teams[p].tm_disc);
- sprintf(info_str_b,"DIS. %d. %d",(p+11),teams[p+11].tm_disc);
- break;
- case(9):
- sprintf(info_str_a,"PER. %d. %d",(p+1),performance[p]);
- sprintf(info_str_b,"PER. %d. %d",(p+11),performance[p+11]);
- break;
- }
- draw_string_left(64,32+(p*10),info_str_a,&main_buff);
- draw_string_left(192,32+(p*10),info_str_b,&main_buff);
- }
- }
-
- /******************************************************************************
- *****************************************************************************/
- extern "C" short state_checksum;
- extern int logic_cnt;
- void info_line()
- {
- set_normal_color(WHITE);
- char info_str1[14];
- char info_str2[14];
- char info_str3[14];
- char info_str4[10];
- char info_str5[10];
- if (setp_taker)
- {
- sprintf(info_str3,"%d ",teams[setp_taker-1].tm_ac);
- draw_string_center(50,60,info_str3,&main_buff);
- sprintf(info_str3,"%d ",teams[setp_taker-1].tm_flair);
- draw_string_center(50,80,info_str3,&main_buff);
- }
- sprintf(info_str3,"1. %d ",users[0].plr);
- draw_string_center(150,60,info_str3,&main_buff);
- sprintf(info_str3,"2. %d ",users[1].plr);
- draw_string_center(150,80,info_str3,&main_buff);
- sprintf(info_str3,"3. %d ",users[2].plr);
- draw_string_center(50,100,info_str3,&main_buff);
- sprintf(info_str3,"4. %d ",users[3].plr);
- draw_string_center(50,120,info_str3,&main_buff);
- sprintf(info_str3,"%d ",deb_is);
- draw_string_center(150,100,info_str3,&main_buff);
- /*
- sprintf(info_str3,"%d ",users[1].control);
- draw_string_center(150,120,info_str3,&main_buff);
- sprintf(info_str3,"%d ",wConsoleNode);
- draw_string_center(100,140,info_str3,&main_buff);
- sprintf(info_str3,"%d ",deb_a);
- draw_string_center(100,160,info_str3,&main_buff);
- sprintf(info_str3,"%1.3f ",mf_scale);
- draw_string_center(100,180,info_str3,&main_buff);
- */
- sprintf(info_str3,"%d ",good_poss);
- sprintf(info_str2,"%d : %d ",frms_per_sec,game_speed);
- // sprintf(info_str2,"%d : %1.2f ",frms_per_sec,poss_held);
- #ifdef CROWD
- switch(crowd_mood_a)
- {
- case(1):
- sprintf(info_str4,"NORMAL ");
- break;
- case(2):
- sprintf(info_str4,"PENSIVE ");
- break;
- case(3):
- sprintf(info_str4,"ENCOURAGE");
- break;
- case(4):
- sprintf(info_str4,"EXCITED ");
- break;
- case(5):
- sprintf(info_str4,"CELEBRATE");
- break;
- case(6):
- sprintf(info_str4,"BOO... ");
- break;
- case(7):
- sprintf(info_str4,"SAVE ");
- break;
- case(8):
- sprintf(info_str4,"MISS ");
- break;
- case(9):
- sprintf(info_str4,"LAUGH ");
- break;
- }
- switch(crowd_mood_b)
- {
- case(1):
- sprintf(info_str5,"NORMAL ");
- break;
- case(2):
- sprintf(info_str5,"PENSIVE ");
- break;
- case(3):
- sprintf(info_str5,"ENCOURAGE");
- break;
- case(4):
- sprintf(info_str5,"EXCITED ");
- break;
- case(5):
- sprintf(info_str5,"CELEBRATE");
- break;
- case(6):
- sprintf(info_str5,"BOO... ");
- break;
- case(7):
- sprintf(info_str5,"SAVE ");
- break;
- case(8):
- sprintf(info_str5,"MISS ");
- break;
- case(9):
- sprintf(info_str5,"LAUGH ");
- break;
- }
- #endif
- if (replay_cnt)
- sprintf(info_str1,"REPLAY");
- else
- {
- if (match_mode)
- {
- switch(match_mode)
- {
- case(CORNER_TL):
- case(CORNER_TR):
- case(CORNER_BL):
- case(CORNER_BR):
- sprintf(info_str1,"CORNER");
- break;
- case(CENTRE_A):
- case(CENTRE_B):
- sprintf(info_str1,"CENTRE");
- break;
- case(GOAL_KICK_TL):
- case(GOAL_KICK_TR):
- case(GOAL_KICK_BL):
- case(GOAL_KICK_BR):
- sprintf(info_str1,"GOAL KICK");
- break;
- case(THROW_IN_A):
- case(THROW_IN_B):
- sprintf(info_str1,"THROW IN");
- break;
- case(IF_KICK_A):
- case(IF_KICK_B):
- if (offside_now)
- sprintf(info_str1,"OFFSIDE FK");
- else
- sprintf(info_str1,"INDIRECT FK");
- break;
- case(DF_KICK_A):
- case(DF_KICK_B):
- sprintf(info_str1,"DIRECT FK");
- break;
- default:
- sprintf(info_str1,"STOPPED");
-
- };
- // Event...
- draw_string_center(50,4,info_str1,&main_buff);
- }
- }
- draw_string_center(270,4,info_str3,&main_buff);
- draw_string_center(160,4,":",&main_buff);
- draw_string_center(270,4,info_str3,&main_buff);
- // Score...
- sprintf(info_str1,"%d - %d",team_a_goals,team_b_goals);
- draw_string_center(160,185,info_str1,&main_buff);
- // Seconds...
- sprintf(info_str1,"%2.2d",(unsigned short)match_time.sec);
- draw_string_center(164,4,info_str1,&main_buff);
- // Minutes...
- sprintf(info_str1,"%3d",match_time.min);
- draw_string_center(126,4,info_str1,&main_buff);
- }
- /******************************************************************************
- *****************************************************************************/
- // Switch off camera damping...
- void damping_off()
- {
- old_camx=camera_x;
- old_camy=camera_y;
- old_camz=camera_z;
- }
- /******************************************************************************
- *****************************************************************************/
- void add_message(char *t,short c,char force)
- {
- if (force)
- {
- // Instant display over-riding current message...
- message_buffer[current_mess].ptr=t;
- message_buffer[current_mess].col=c;
- new_text=MESSAGE_TIME;
- if (!message_cnt)
- message_cnt++;
- }
- else
- {
- if (message_cnt<MAX_MESSAGES)
- {
- // Can provide message service...
- short m=message_cnt+current_mess;
- if (m>=MAX_MESSAGES)
- m-=MAX_MESSAGES;
- short lm=m-1;
- if (lm<0)
- lm=MAX_MESSAGES-1;
- if (!message_cnt || strcmp(t,message_buffer[lm].ptr))
- {
- // New message...
- message_buffer[m].ptr=t;
- message_buffer[m].col=c;
- if (!message_cnt++)
- new_text=MESSAGE_TIME;
- }
- }
- }
- }
- /******************************************************************************
- *****************************************************************************/
- void display_messages()
- {
- if (new_text)
- {
- set_normal_color(message_buffer[current_mess].col);
- draw_string_center(main_buff.clip_wid>>1,main_buff.clip_hgt/16,
- message_buffer[current_mess].ptr,&main_buff);
- }
- }
- /******************************************************************************
- *****************************************************************************/
- void change_cam(short c)
- {
- set_camera_dist=260;
- set_camera_height=100;
- camera=c;
- char *t;
- if (!camera)
- t="FAR";
- if (camera==1)
- t="PLAN";
- if (camera==2)
- t="G.LINE";
- if (camera==3)
- t="MANUAL";
- if (camera==4)
- t="PLAYER";
- if (camera==5)
- t="USER";
- if (camera==6)
- t="FOLLOW";
- if (camera==7)
- t="REF.";
- if (camera==8)
- t="WIRE";
- if (camera==14)
- t="ISO.";
- if ((camera<14 && camera>8) || (camera>14))
- t=" ";
- add_message(t,YELLOW,TRUE);
- }
- ////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////
- void update_3d()
- {
- float targ_x,targ_y,targ_z;
- char use_fixed;
- scale=INIT_SCALE;
- char cam_limit=TRUE;
- char cam_buffer=TRUE;
- plyrdat *ptr=pos; // Tweened object x,y,z and orientations...
- float x,y;
- if (!line_up)
- {
- // Not in pre-match line-up (can use all available camera options)...
-
- if (!replay_cnt)
- {
- // No celebration view during replay...
- if ((just_scored && just_scored<(SCORE_WAIT-30)) && (camera!=15))
- {
- // Camera is forced to follow scorer!
- old_cam=camera;
- #ifdef WAYNE
- camera=20;
- if (keys[0x11]) // w
- {
- wayne_cam[0]=set_camera_dist;
- wayne_cam[1]=set_camera_height;
- FILE *fp1=fopen("wayne","wb");
- fwrite(wayne_cam,sizeof(float),2,fp1);
- fclose(fp1);
- do_penalty_anim(0);
- do_penalty_menu(0);
- }
- if (keys[0x2c]) // z
- {
- FILE *fp1=fopen("wayne","rb");
- fread(wayne_cam,sizeof(float),2,fp1);
- fclose(fp1);
- set_camera_dist=wayne_cam[0];
- set_camera_height=wayne_cam[1];
- }
-
- #else
- camera=15; // Follow scorer.
- #endif
- }
- else
- {
- if (!just_scored && camera==15)
- camera=old_cam;
- }
- }
- if (!EUROmatch_info.timeit)
- {
- #ifdef SUPPORT_LP
- if (users_dir[lp_user-1].f&32 || users_dir[lp_user-1].f&16)
- {
- if ((keys[0x4b] || (users_dir[lp_user-1].f&4
- && users_dir[lp_user-1].f&32)) && (set_camera_dist>10)) // keypad 4
- set_camera_dist-=4;
- if ((keys[0x4d] || (users_dir[lp_user-1].f&8
- && users_dir[lp_user-1].f&32)) && (set_camera_dist<600)) // keypad 6
- set_camera_dist+=4;
- if ((keys[0x48] || (users_dir[lp_user-1].f&8
- && users_dir[lp_user-1].f&16)) && (set_camera_height<600)) // keypad 8
- set_camera_height+=4;
- if ((keys[0x50] || (users_dir[lp_user-1].f&4
- && users_dir[lp_user-1].f&16)) && (set_camera_height>10)) // keypad 2
- set_camera_height-=4;
- }
- #endif
- if ((keys[0x4b]) && (set_camera_dist>10)) // keypad 4
- set_camera_dist-=4;
- if ((keys[0x4d]) && (set_camera_dist<600)) // keypad 6
- set_camera_dist+=4;
- if ((keys[0x48]) && (set_camera_height<600)) // keypad 8
- set_camera_height+=4;
- if ((keys[0x50]) && (set_camera_height>10)) // keypad 2
- set_camera_height-=4;
- if (keys[0x4c]) // keypad 5
- {
- set_camera_dist=260;
- set_camera_height=100;
- }
- if (replay_cnt || (!just_scored && match_mode!=SWAP_ENDS))
- {
- // Don't allow user to change camera during celebration!
- if (keys[0x02]) // 1 // Autocam
- change_cam(0); // camera=0
- if (keys[0x03]) // 2 // Plan
- change_cam(1); // camera=1
- if (keys[0x04]) // 3 // 1/2 Plan
- change_cam(2); // camera=2
- if (keys[0x05]) // 4
- change_cam(3); // camera=3
- if (keys[0x06]) // 5 // Player
- change_cam(4); // camera=4
- if (keys[0x07]) // 6 // Wire
- change_cam(8); // camera=8
- if (keys[0x08]) // 7 // Referee
- change_cam(7); // camera=7
- if (keys[0x09]) // 8 // Isometric
- change_cam(14); // camera=14
- }
- if (debug)
- {
- // don't use these views for normal game.
- if (keys[0x0a]) // 9
- change_cam(5); // camera=5
- if (keys[0x0b]) // 0
- change_cam(6); // camera=6
- }
- if (camera==4)
- {
- if ((keys[0x48]) && (play_cam<players)) //keypad 8
- play_cam+=1;
- if ((keys[0x50]) && (play_cam>1)) //keypad 2
- play_cam-=1;
- }
- // If in network game and a fixed player has been chosen,
- // then all camera views should treat the fixed player (not the ball)
- // as the target...
- if (network_on && fixed_net_user)
- {
- // Fixed player target...
- targ_x=teams[users[fixed_net_user-1].plr-1].tm_x;
- targ_y=teams[users[fixed_net_user-1].plr-1].tm_y;
- targ_z=teams[users[fixed_net_user-1].plr-1].tm_z;
- use_fixed=TRUE;
- }
- else
- {
- if (use_ball_limit)
- {
- targ_x=ballx_out;
- targ_y=bally_out;
- targ_z=ballz_out;
- }
- else
- {
- targ_x=eff_ballx;
- targ_y=eff_bally;
- targ_z=eff_ballz;
- }
- use_fixed=FALSE;
- }
- }
- /***************************************/
- // FACE CELEBRATION
- /***************************************/
- if (camera==15)
- {
- cam_buffer=TRUE;
- tx=teams[goal_scorer-1].tm_x;
- ty=teams[goal_scorer-1].tm_y;
- tz=24;
- camera_x=tx+teams[goal_scorer-1].tm_xdis*set_camera_dist/1.5;
- camera_y=ty+teams[goal_scorer-1].tm_ydis*set_camera_dist/1.5;
- camera_z=set_camera_height/1.5;
- }
- /***************************************/
- // TUNNEL VEIW
- /***************************************/
- if (camera==16)
- {
- cam_buffer=TRUE;
- tx=stadlist[setup.stadium].tunlx;
- ty=-stadlist[setup.stadium].tunlz;
- tz=stadlist[setup.stadium].tunly;
- camera_x=cntspot_x;
- camera_y=cntspot_y;
- camera_z=40;
- }
- /***************************************/
- // PLAYER ON/OFF VEIW
- /***************************************/
- if (camera==17)
- {
- short p=player_on_off;
- if (player_on_off<0)
- p=-p;
- p-=1;
- cam_buffer=TRUE;
- if (-stadlist[setup.stadium].tunlz>cntspot_y)
- camera_y=teams[p].tm_y-(40+(teams[p].tm_y/2));
- else
- camera_y=teams[p].tm_y+(40+((pitch_wid-teams[p].tm_y)/2));
- camera_x=teams[p].tm_x;
- camera_z=80;
- tx=teams[p].tm_x;
- ty=teams[p].tm_y;
- tz=10;
- }
- /***************************************/
- // MAN OF THE MATCH VEIW
- /***************************************/
- if (camera==18)
- {
- cam_buffer=TRUE;
- tx=teams[man_of_match-1].tm_x;
- ty=teams[man_of_match-1].tm_y;
- tz=20;
- camera_x=tx+(teams[man_of_match-1].tm_xdis*set_camera_dist);
- camera_y=ty+(teams[man_of_match-1].tm_ydis*set_camera_dist);
- camera_z=set_camera_height/2;
- }
- /***************************************/
- // GOAL-SCORER
- /***************************************/
- if (camera==20)
- {
- cam_buffer=TRUE;
- cam_limit=FALSE;
- float x,y,z,d;
- if (last_goal==1)
- {
- // B vidi...
- x=stadlist[setup.stadium].vid2x;
- y=-stadlist[setup.stadium].vid2z;
- z=stadlist[setup.stadium].vid2y;
- }
- else
- {
- // A vidi...
- x=stadlist[setup.stadium].vid1x;
- y=-stadlist[setup.stadium].vid1z;
- z=stadlist[setup.stadium].vid1y;
- }
- tx=x+(teams[goal_scorer-1].tm_x-x)*just_scored/(SCORE_WAIT-30);
- ty=y+(teams[goal_scorer-1].tm_y-y)*just_scored/(SCORE_WAIT-30);
- tz=z+(teams[goal_scorer-1].tm_z-z)*just_scored/(SCORE_WAIT-30);
- x-=teams[goal_scorer-1].tm_x;
- y-=teams[goal_scorer-1].tm_y;
- z-=teams[goal_scorer-1].tm_z;
- d=calc_dist(x,y);
- x=(x*set_camera_dist*0.5/d);
- y=(y*set_camera_dist*0.5/d);
- z=15;
- camera_x=teams[goal_scorer-1].tm_x-x;
- camera_y=teams[goal_scorer-1].tm_y-y;
- camera_z=z;
- }
- /***************************************/
- // AUTO-CAMERA
- /***************************************/
- if (camera==0)
- {
- datapt over=((targ_x>cntspot_x) ? (targ_x-cntspot_x)/2:(cntspot_x-targ_x)/2);
- datapt target_x=(int)(targ_x);
- datapt target_y=(int)(pitch_wid/2)+((targ_y-cntspot_y)/2)-(targ_z/4)+60;
- datapt target_z=0; //(int)targ_z;
-
- tx=target_x;
- ty=target_y;
- tz=target_z;
-
- camera_x=(pitch_len/2)+((tx-pitch_len/2)/2);
- camera_y=(pitch_wid+60)+((targ_y-cntspot_y)/1.5)-(over);
- camera_z=180-(targ_y/12)+(over/3);
- }
- /***************************************/
- // PLAN ( Kick-off view )
- /***************************************/
- if (camera==1)
- {
- static float dx=0;
- static float dy=0;
- float x,y,dcx,dcy,move_rate;
-
- cam_buffer=FALSE; // Switch camera buffering off!
- cam_limit=FALSE; // Switch camera limit off!
-
- if (game_speed)
- move_rate=(0.2*MF*REAL_SPEED)/game_speed;
- else
- move_rate=0.2;
-
- if (ball_still || use_fixed)
- {
- x=targ_x;
- y=targ_y;
- }
- else
- {
- dx+=((ballxdis*10)-dx)*0.8;
- dy+=((ballydis*10)-dy)*0.8;
-
- x=(eff_ballx+dx);
- y=(eff_bally+dy);
- }
-
- dcx=x-old_tx;
- dcy=y-old_ty;
-
- cxs+=(dcx*camera_inertia-cxs)*move_rate;
- cys+=(dcy*camera_inertia-cys)*move_rate;
-
- x=old_tx+cxs;
- y=old_ty+cys;
-
- int xhf=(set_camera_height/2.45)-prat*3;
- int yhf=(set_camera_height/1.6)-prat*2;
-
- if (x<xhf)
- x=xhf;
- if (x>pitch_len-xhf)
- x=pitch_len-xhf;
- if (y<yhf)
- y=yhf;
- if (y>pitch_wid-yhf)
- y=pitch_wid-yhf;
-
- tx=x;
- ty=y;
- tz=0;
-
- camera_x=x-1;
- camera_y=y;
- camera_z=prat*6+set_camera_height;
- }
- /***************************************/
- // 1/2 PLAN ( Sensi style view )
- /***************************************/
- if (camera==2)
- {
- static float dx=0;
- static float dy=0;
- float x,y,dcx,dcy,move_rate;
-
- cam_buffer=FALSE; // Switch camera buffering off!
- cam_limit=FALSE; // Switch camera limit off!
- if (game_speed)
- move_rate=(0.2*MF*REAL_SPEED)/game_speed;
- else
- move_rate=0.2;
-
- if (ball_still || use_fixed)
- {
- x=targ_x;
- y=targ_y;
- }
- else
- {
- dx+=((ballxdis*10)-dx)*0.4;
- dy+=((ballydis*10)-dy)*0.4;
-
- x=(eff_ballx+dx);
- y=(eff_bally+dy);
- }
-
- dcx=x-old_tx;
- dcy=y-old_ty;
-
- cxs+=(dcx*camera_inertia-cxs)*move_rate;
- cys+=(dcy*camera_inertia-cys)*move_rate;
-
- x=old_tx+cxs;
- y=old_ty+cys;
-
- int xhf=((set_camera_height+8)/2.45)-prat*3;
- int yhf=(calc_dist(set_camera_dist+(targ_x/6),(set_camera_height+8)/2)/1.6)-prat*3;
-
- if (x<xhf)
- x=xhf;
- if (x>pitch_len-xhf)
- x=pitch_len-xhf;
- if (y<yhf)
- y=yhf;
- if (y>pitch_wid-yhf)
- y=pitch_wid-yhf;
-
- tx=x;
- ty=y;
- tz=0;
-
- camera_x=x-set_camera_dist-(targ_x/6);
- camera_y=y;
- camera_z=(set_camera_height+8);
- }
- /***************************************/
- // MANUAL
- /***************************************/
- if (camera==3)
- {
- ReportMouse();
- camera_x=Mouse.x*2.125-40;
- camera_y=Mouse.y*4.4-40;
- camera_z=set_camera_height;
- tx=targ_x;
- ty=targ_y;
- tz=targ_z;
- }
- /***************************************/
- // PLAYER
- /***************************************/
- if (camera==4)
- {
- cam_buffer=2;
- camera_x=(ptr+(play_cam-1))->x;
- camera_z=(ptr+(play_cam-1))->y+PLAYER_HEIGHT-3;
- camera_y=(ptr+(play_cam-1))->z;
-
- x=-(ptr+(play_cam-1))->crot;
- y=((ptr+(play_cam-1))->srot);
-
- tx=camera_x+x*100;
- ty=camera_y+y*100;
- tz=PLAYER_HEIGHT-3;
- }
- /***************************************/
- // USER
- /***************************************/
- if (camera==5)
- {
- camera_x=(ptr+(ball_poss-1))->x;
- camera_z=(ptr+(ball_poss-1))->y+PLAYER_HEIGHT;
- camera_y=(ptr+(ball_poss-1))->z+2;
-
- x=-(ptr+(ball_poss-1))->crot;
- y=((ptr+(ball_poss-1))->srot);
-
- tx=camera_x+x*100;
- ty=camera_y+y*100;
- tz=PLAYER_HEIGHT;
-
- damping_off();
- }
- /***************************************/
- // FOLLOW BALL
- /***************************************/
- if (camera==6)
- {
- float xd,yd;
-
- if (ball_poss)
- {
- xd=teams[ball_poss-1].tm_xdis;
- yd=teams[ball_poss-1].tm_ydis;
- }
- else
- {
- xd=ballxdis;
- yd=ballydis;
- }
-
- if ((ABS(xd)<.1) && (ABS(yd)<.1))
- {
- tx=old_tx;
- ty=old_ty;
- tz=old_tz;
- camera_x=old_camx;
- camera_y=old_camy;
- camera_z=targ_z+40;
- }
- else
- {
- float d=calc_dist(xd,yd);
- camera_x=targ_x-(120*xd/d);
- camera_y=targ_y-(120*yd/d);
- camera_z=targ_z+40;
-
- tx=targ_x;
- ty=targ_y;
- tz=targ_z;
- }
- }
-
- /***************************************/
- // REFEREE
- /***************************************/
- if (camera==7)
- {
- cam_buffer=2;
- camera_x=(ptr+(players))->x;
- camera_z=(ptr+(players))->y+PLAYER_HEIGHT-3;
- camera_y=(ptr+(players))->z;
-
- x=-(ptr+(players))->crot;
- y=(ptr+(players))->srot;
-
- tx=camera_x+x*100;
- ty=camera_y+y*100;
- tz=PLAYER_HEIGHT-3;
- damping_off();
- }
- /***************************************/
- // WIRE
- /***************************************/
- if (camera==8)
- {
- float bxd,byd,d,ox,oy,nx,ny;
- if ((!match_mode) || (match_mode==CENTRE_A) || (match_mode==CENTRE_B)
- || (match_mode>=IF_KICK_A && match_mode<=PEN_KICK_B))
- {
- // Normal Play...
- camera_dist=set_camera_dist;
-
- if (targ_x>cntspot_x)
- // Right goal...
- {
- bxd=pitch_len-targ_x;
- byd=cntspot_y-targ_y;
- }
- else
- {
- // Left goal...
- bxd=-targ_x;
- byd=cntspot_y-targ_y;
- }
-
- d=calc_dist(bxd,byd);
- bxd=bxd/d;
- byd=byd/d;
-
- ox=0;
- oy=-1;
-
- // get difference (cos a).
- float dif=acos((bxd*ox)+(byd*oy));
- if (targ_x>cntspot_x)
- dif=(((targ_x-cntspot_x)/cntspot_x)*(dif));
- else
- dif=-(((cntspot_x-targ_x)/cntspot_x)*(dif));
- // The closer to the goal-line, the more in line with ball to goal!
-
- nx=(ox*cos(dif))-(oy*sin(dif));
- ny=(oy*cos(dif))+(ox*sin(dif));
-
- tx=targ_x+(nx*(set_camera_dist+20)/3);
- ty=targ_y+(ny*(set_camera_dist+20)/3);
- tx=targ_x;
- ty=targ_y;
- tz=targ_z/2;
-
- camera_x=targ_x-(nx*(set_camera_dist+20));
- camera_y=targ_y-(ny*((set_camera_dist+20)
- -((set_camera_dist+20)*(targ_y/(pitch_wid*2)))));
- camera_z=(set_camera_height+20)-(((set_camera_height+20)*.8)*(ABS((targ_y-cntspot_y)/cntspot_y)));
-
- if (targ_y<cntspot_y)
- camera_y=camera_y+((cntspot_y-targ_y)/20);
-
- // Now bring target in according to height...
- bxd=camera_x-tx;
- byd=camera_y-ty;
- d=calc_dist(bxd,byd);
- bxd=tx+(bxd*camera_z/(d*5));
- byd=ty+(byd*camera_z/(d*5));
-
- tx=bxd;
- ty=byd;
- }
- else
- {
- switch(match_mode)
- {
-
- case(GOAL_KICK_TL):
- case(GOAL_KICK_BL):
- camera=9;
- break;
-
- case(GOAL_KICK_TR):
- case(GOAL_KICK_BR):
- camera=10;
- break;
-
- case(CORNER_TL):
- case(CORNER_BL):
- camera=11;
- break;
-
- case(CORNER_TR):
- case(CORNER_BR):
- camera=12;
- break;
-
- case(THROW_IN_A):
- case(THROW_IN_B):
- camera=13;
- break;
- }
- }
- }
- /***************************************/
- /***************************************/
- if (camera==9)
- // Goal kick from left...
- {
- camera_y=cntspot_y;
- camera_x=eff_ballx-set_camera_dist;
- camera_z=eff_ballz/2+set_camera_height;
- tx=eff_ballx+((cntspot_x-eff_ballx)/10);
- ty=eff_bally;
- tz=eff_ballz;
- if (match_mode!=GOAL_KICK_TL && match_mode!=GOAL_KICK_BL)
- camera=8;
- }
- /***************************************/
- /***************************************/
- if (camera==10)
- // Goal kick from right...
- {
- camera_y=cntspot_y;
- camera_x=eff_ballx+set_camera_dist;
- camera_z=eff_ballz/2+set_camera_height;
- tx=eff_ballx-((eff_ballx-cntspot_x)/10);
- ty=eff_bally;
- tz=eff_ballz;
- if (match_mode!=GOAL_KICK_TR && match_mode!=GOAL_KICK_BR)
- camera=8;
- }
- /***************************************/
- /***************************************/
- if (camera==11)
- // Corner kick at left goal...
- {
- float bxd,byd,d;
- tx=prat*12;
- ty=cntspot_y;
- tz=0;
- bxd=eff_ballx-tx;
- byd=eff_bally-ty;
- d=calc_dist(bxd,byd);
- camera_x=eff_ballx+(bxd*set_camera_dist/d);
- camera_y=eff_bally+(byd*set_camera_dist/d);
- camera_z=set_camera_height/4;
- if ((!match_mode) && (last_touch!=corner_taker))
- camera=8;
- }
- /***************************************/
- /***************************************/
- if (camera==12)
- // Corner kick at right goal...
- {
- float bxd,byd,d;
- tx=pitch_len-(prat*12);
- ty=cntspot_y;
- tz=0;
- bxd=eff_ballx-tx;
- byd=eff_bally-ty;
- d=calc_dist(bxd,byd);
- camera_x=eff_ballx+(bxd*set_camera_dist/d)/2;
- camera_y=eff_bally+(byd*set_camera_dist/d)/2;
- camera_z=set_camera_height/4;
- if ((!match_mode) && (last_touch!=corner_taker))
- camera=8;
- }
- /***************************************/
- /***************************************/
- if (camera==13)
- // Throw in...
- {
- tx=eff_ballx;
- ty=eff_bally;
- tz=eff_ballz;
- camera_x=eff_ballx;
- camera_y=eff_bally;
-
- if (bally>cntspot_y)
- camera_y+=set_camera_dist/2;
- else
- camera_y-=set_camera_dist/2;
-
- camera_z=eff_ballz+set_camera_height/4;
-
- if ((!match_mode) && (last_touch!=throw_in_taker))
- camera=8;
- }
- /***************************************/
- // ISOMETRIC
- /***************************************/
- if (camera==14)
- {
- tx=targ_x;
- ty=targ_y+((cntspot_y-targ_y)/4);
- tz=targ_z;
-
- camera_x=tx-20-set_camera_dist*1.4;
- camera_y=ty+20+set_camera_dist*1.4;
- camera_z=targ_z/3+(set_camera_height*2);
-
- scale=512*2;
- cam_limit=TRUE;
- }
- }
- else
- {
- // Pre-match Line-up!!!
- if (first_update)
- {
- cam_buffer=FALSE;
- first_update=FALSE;
- }
- else
- cam_buffer=TRUE;
- if (line_up>=40)
- {
- // Move camera...
- cam_limit=FALSE;
- float rad=((LINE_UP_DELAY+40-line_up)*(LINE_UP_DELAY+40-line_up))/90;
- float ang=(float)(line_up-40)/LINE_UP_DELAY*PI;
- tx=ballx;
- ty=bally;
- tz=ball_diam/2;
- camera_x=tx-(3*rad*sin(ang));
- camera_y=ty+(3*rad*cos(ang))-30;
- camera_z=20+rad;
- /*
- y=(float)(line_up-40)/LINE_UP_DELAY;
- camera_z=prat*2+(y*y*y*y*(prat*60));
- camera_x=cntspot_x;
- camera_y=cntspot_y+80+(y*y*(prat*80));
- tx=cntspot_x;
- ty=cntspot_y+(y*y*(prat*30));
- tz=0;
- */
- }
- }
- /***************************************/
- /***************************************/
- #define PULL_BACK_FACTOR 1.
- if (prev_camera!=camera)
- mode_change=CAM_MODE_BUFFER;
- prev_camera=camera;
- float cur_camx,cur_camy,cur_camz,cur_tx,cur_ty,cur_tz;
- float dif_camx,dif_camy,dif_camz,dif_tx,dif_ty,dif_tz,dif_scale;
- static float move_rate=0.4;
- if (!line_up && camera==8 && camera==6)
- {
- float d=calc_dist(tx-camera_x,ty-camera_y);
- d=calc_dist(tz-camera_z,d);
- x=(camera_x-tx)/d;
- y=(camera_y-ty)/d;
- float z=(camera_z-tz)/d;
- float cam_dist=calc_dist(set_camera_dist,set_camera_height);
- float r=(d/cam_dist)*PULL_BACK_FACTOR;
- camera_x=tx+(r*d*x);
- camera_y=ty+(r*d*y);
- camera_z=tz+(r*d*z);
- }
- // Stadium Perimeter as defined by 3d engine...
- int st_l=stadlist[setup.stadium].st_l;
- int st_w=stadlist[setup.stadium].st_w;
- int st_h=stadlist[setup.stadium].st_h;
- if (cam_limit)
- {
- // Camera cannot go far off pitch...
- if (camera_x<-st_l/2)
- camera_x=-st_l/2;
- if (camera_x>pitch_len+(st_l/2))
- camera_x=pitch_len+(st_l/2);
- if (camera_y<-st_w/2)
- camera_y=-st_w/2;
- if (camera_y>pitch_wid+(st_w/2))
- camera_y=pitch_wid+(st_w/2);
- if (camera_z>st_hm)
- camera_z=st_hm;
- }
- if (cam_buffer)
- {
- // Tween scale...
- dif_scale=scale-old_scale;
- // Camera buffering...
- dif_camx=camera_x-old_camx;
- dif_camy=camera_y-old_camy;
- dif_camz=camera_z-old_camz;
- dif_tx=tx-old_tx;
- dif_ty=ty-old_ty;
- dif_tz=tz-old_tz;
- if (!replay_cnt)
- {
- // Time Camera movement...
- if (count>old_count+(TIMER_SPEED/2))
- // Half a second interval...
- {
- old_count+=(TIMER_SPEED/2);
- if (!updates)
- updates=1;
- if (camera==3)
- move_rate=1./updates; // Mouse control disregards game speed!
- else
- move_rate=1./updates*game_speed/REAL_SPEED;
- updates=0;
- }
- }
- else
- {
- // No need to time...
- move_rate=0.2;
- }
- if (dif_camx>MAX_CAM_DIF)
- dif_camx=MAX_CAM_DIF;
- if (dif_camy>MAX_CAM_DIF)
- dif_camy=MAX_CAM_DIF;
- if (dif_camz>MAX_CAM_DIF)
- dif_camz=MAX_CAM_DIF;
- if (dif_camx<-MAX_CAM_DIF)
- dif_camx=-MAX_CAM_DIF;
- if (dif_camy<-MAX_CAM_DIF)
- dif_camy=-MAX_CAM_DIF;
- if (dif_camz<-MAX_CAM_DIF)
- dif_camz=-MAX_CAM_DIF;
- if (dif_tx>MAX_CAM_DIF)
- dif_tx=MAX_CAM_DIF;
- if (dif_ty>MAX_CAM_DIF)
- dif_ty=MAX_CAM_DIF;
- if (dif_tz>MAX_CAM_DIF)
- dif_tz=MAX_CAM_DIF;
- if (dif_tx<-MAX_CAM_DIF)
- dif_tx=-MAX_CAM_DIF;
- if (dif_ty<-MAX_CAM_DIF)
- dif_ty=-MAX_CAM_DIF;
- if (dif_tz<-MAX_CAM_DIF)
- dif_tz=-MAX_CAM_DIF;
- cur_camx=old_camx+(dif_camx*move_rate);
- cur_camy=old_camy+(dif_camy*move_rate);
- cur_camz=old_camz+(dif_camz*move_rate);
- cur_tx=old_tx+(dif_tx*move_rate*1.5);
- cur_ty=old_ty+(dif_ty*move_rate*1.5);
- cur_tz=old_tz+(dif_tz*move_rate*1.5);
- }
- else
- {
- cur_camx=camera_x;
- cur_camy=camera_y;
- cur_camz=camera_z;
- cur_tx=tx;
- cur_ty=ty;
- cur_tz=tz;
- }
- #ifndef DEMO
- if (opt_user && !replay_cnt)
- {
- plyrdat *buff=new_coords;
- // In Game options menu(Formation,Subs,Replay)
- old_rep_pos=replay_pos;
- replay_pos++; // In case of replay point to first frame...
- if (opt_user==100)
- {
- // Substitution Menu...
- sub_camera=camera;
- camera=17;
- subbing_now=SUB_DELAY;
- substitution(&main_buff,cur_camx,cur_camz,cur_camy,
- cur_tx,cur_tz,cur_ty,
- scale,pos,&spr_coord_tab[0],&spr_ref_tab[0],opt_team);
- if (!player_being_subbed)
- camera=sub_camera;
- opt_user=FALSE;
- }
- else
- {
- options(&main_buff,cur_camx,cur_camz,cur_camy,
- cur_tx,cur_tz,cur_ty,
- scale,pos,&spr_coord_tab[0],&spr_ref_tab[0],--opt_user,opt_team);
- }
- // if (buff!=new_coords)
- // switch_coords();
- replay_pos=old_rep_pos;
- old_count=count;
- opt_user=0;
- stop_mf_time();
- }
- else
- #endif
- {
- if (key_togs[0x0a] && !vidi_anim) // 9
- // Vidi screen on...
- {
- render3d(&vidi_buff,cntspot_x,cur_camz,pitch_wid+80,
- eff_ballx,eff_ballz,eff_bally,
- scale,pos,&spr_coord_tab[0],&spr_ref_tab[0]);
- vidi_buff.dump(0,0);
- }
- // Straight to Vram...
- // main_buff.buff_start=(unsigned char *)0xa0000;
- // Update display buffer...
- render3d(&main_buff,cur_camx,cur_camz,cur_camy,
- cur_tx,cur_tz,cur_ty,
- scale,pos,&spr_coord_tab[0],&spr_ref_tab[0]);
- }
- // Overlaid sprites...
- if (debug)
- {
- info_line();
- if (xinfo)
- extra_info();
- }
- // New Message...
- display_messages();
- #ifdef EURO96
- // Name of player in possession...
- if (last_touch && match_mode!=THROW_IN_A && match_mode!=THROW_IN_B)
- {
- short c;
- short p=last_touch;
- char name[20];
- if (p<12)
- c=(match_half&1 ? 1:0);
- else
- c=(match_half&1 ? 0:1);
- p=standard_player(p);
- itoa(teams[last_touch-1].shirt,name,10);
- char *n=&game_data[country(c)].players[p-1].name[game_data[country(c)].players[p-1].goal_index];
- strcat(name,". ");
- strcat(name,n);
- if (!c)
- {
- set_normal_color(TEAM1COL);
- draw_string_left(8,1,name,&main_buff);
- }
- else
- {
- set_normal_color(TEAM2COL);
- draw_string_right(main_buff.clip_wid-8,1,name,&main_buff);
- }
- }
- #endif
- /* Goal Sprite Out...
- if (just_scored>0 && !replay_cnt)
- {
- // OUT
- shadow_sprite(160*2+6,100*2+8,0,&main_buff);
- overlay_sprite(160*2,100*2,0,&main_buff);
- }
- */
- main_buff.dump(0,0);
- old_tx=cur_tx;
- old_ty=cur_ty;
- old_tz=cur_tz;
- old_camx=cur_camx;
- old_camy=cur_camy;
- old_camz=cur_camz;
- old_scale=scale;
- }
- /******************************************************************************
- *****************************************************************************/
- void pass_coords(plyrdat *ptr)
- {
- float x,y;
- plyrdat *rep=&replay_tab[replay_pos*ncb]; // Replay Frame...
- int col;
- if (replay_cnt && replay_seconds)
- {
- // Replay On....
- // Use Replay Table only...
- memcpy(ptr,rep,sizeof(plyrdat)*ncb);
- }
- else
- {
- // Normal Game mode....
- // Update Replay table also...
- for (int i=0; i<players+3; i++)
- {
- if (i>=players)
- {
- // Officials
- ptr->x=(datapt)(refs[i-(players)].x); //x
- ptr->y=(datapt)(refs[i-(players)].z); //y
- ptr->z=(datapt)(refs[i-(players)].y); //z
- if (i==players)
- ptr->type=3; //referee colour
- else
- ptr->type=4; //linesman colour
- ptr->crot=refs[i-(players)].dir_x;
- ptr->srot=refs[i-(players)].dir_y;
- ptr->anim=refs[i-(players)].anim; //anim seq.
- ptr->frame=refs[i-(players)].frm; //anim frm.
- ptr->fstep=refs[i-(players)].fstep; //anim fstep.
- ptr->htype=0; // htype
- ptr->hcol=0; // hcol
- if (speech_tab[i].cnt)
- ptr->sprite=speech_tab[i].say;
- else
- ptr->sprite=-1;
- ptr++;
- }
- else
- {
- ptr->x=(datapt)(teams[i].tm_x); //x
- ptr->y=(datapt)(teams[i].tm_z); //y
- ptr->z=(datapt)(teams[i].tm_y); //z
- if (!teams[i].guy_on)
- // Not on field...
- ptr->type=FALSE;
- else
- {
- if (teams[i].draw_me)
- {
- if (match_half&1)
- {
- if (i>=players/2)
- col=1;
- else
- col=2;
-
- }
- else
- {
- if (i>=players/2)
- col=2;
- else
- col=1;
- }
- }
- else
- col=FALSE; // Don't draw him!
- ptr->type=col; //colour
- }
- ptr->number=teams[i].shirt;
- x=(teams[i].tm_xdis); //x
- y=(teams[i].tm_ydis); //y
- ptr->crot=x;
- ptr->srot=y;
- ptr->anim=teams[i].tm_anim;
- ptr->frame=teams[i].tm_frm;
- ptr->fstep=teams[i].tm_fstep;
- ptr->htype=(float)teams[i].tm_htype;
- ptr->hcol=(float)teams[i].tm_hcol;
- if (speech_tab[i].cnt)
- ptr->sprite=speech_tab[i].say;
- else
- ptr->sprite=-1;
- ptr++;
- }
- }
- ptr->x=ballx;
- ptr->y=ballz;
- // ptr->y=ball_diam/2+ballz-0.5;
- ptr->z=bally;
- ptr->type=0; //ball type
- ptr->crot=cos(ball_horz_ang-PI/2);
- ptr->srot=sin(ball_horz_ang-PI/2);
- ptr->anim=0;
- ptr->frame=cos(ball_vert_ang);
- ptr->fstep=sin(ball_vert_ang);
- ptr->sprite=0;
- ptr++;
- // Store in replay array...
- if (replay_seconds)
- memcpy(rep,ptr-ncb,sizeof(plyrdat)*ncb);
- }
- }
- /******************************************************************************
- *****************************************************************************/
- void switch_coords()
- {
- if (new_coords==coords_tab1)
- {
- new_coords=coords_tab2;
- old_coords=coords_tab1;
- }
- else
- {
- new_coords=coords_tab1;
- old_coords=coords_tab2;
- }
- }
- /******************************************************************************
- *****************************************************************************/
- void new_update_coords()
- {
- switch_coords();
- pass_coords(new_coords);
- }
- /******************************************************************************
- *****************************************************************************/
- void realtime_coords()
- {
- double n;
- plyrdat *old=old_coords;
- plyrdat *newp=new_coords;
- plyrdat *ptr=pos;
- float ox,oy,nx,ny,dif;
- int col;
- if (tweening)
- {
- for (int i=0; i<players+3; i++)
- {
- if ((teams[i].guy_on) || (i>=players))
- {
- nx=newp->x;
- ox=old->x;
- nx=ox+((nx-ox)*mf_scale);
- ptr->x=nx;
- nx=newp->y;
- ox=old->y;
- nx=ox+((nx-ox)*mf_scale);
- ptr->y=nx;
- nx=newp->z;
- ox=old->z;
- nx=ox+((nx-ox)*mf_scale);
- ptr->z=nx;
- ptr->type=newp->type; //col
- ptr->number=newp->number; // shirt no.
- ox=(old->crot);
- oy=(old->srot);
- nx=(newp->crot);
- ny=(newp->srot);
- // get difference...
- dif=((nx*ox)+(ny*oy));
- if (dif>1.0)
- dif=1;
- if (dif<-1.0)
- dif=-1;
- dif=acos(dif);
- dif=dif*mf_scale;
- // Which way to turn?
- if ((nx*oy)<(ny*ox))
- dif=-dif;
-
- nx=(ox*cos(dif))+(oy*sin(dif));
- ny=(oy*cos(dif))-(ox*sin(dif));
- ptr->crot=-nx; //xd
- ptr->srot=ny; //yd
- // Animation seq...
- ptr->anim=newp->anim;
- // Animation frame...
- if ((i>=players && refs[i-players].newanim)
- || (teams[i].tm_newanim && i<players))
- {
- nx=modf(newp->frame,&n);
- ptr->frame=nx; // Initial frame...
- if (i>=players)
- refs[i-players].newanim=FALSE;
- else
- teams[i].tm_newanim=FALSE;
- old->frame=0;
- }
- else
- {
- nx=newp->frame;
- ox=old->frame;
- if (nx<ox)
- // Prevent backwards tweening...(looks bad in slow motion!)
- nx+=1;
- nx=ox+((nx-ox)*mf_scale);
- nx=modf(nx,&n);
- ptr->frame=nx;
- if (i==11)
- deb_data=nx;
- }
- ptr->fstep=newp->fstep;
- ptr->htype=newp->htype;
- ptr->hcol=newp->hcol;
- ptr->sprite=newp->sprite;
- }
- else
- {
- ptr->type=0; //Off!
- }
- ptr++;
- newp++;
- old++;
- }
- // Ball...
- nx=newp->x;
- ox=old->x;
- nx=ox+((nx-ox)*mf_scale);
- ptr->x=nx;
- eff_ballx=nx;
- nx=newp->y;
- ox=old->y;
- nx=ox+((nx-ox)*mf_scale);
- ptr->y=nx;
- eff_ballz=nx;
- nx=newp->z;
- ox=old->z;
- nx=ox+((nx-ox)*mf_scale);
- ptr->z=nx;
- eff_bally=nx;
- ptr->type=0;
- ox=(old->crot);
- oy=(old->srot);
- nx=(newp->crot);
- ny=(newp->srot);
- // get difference...
- dif=((nx*ox)+(ny*oy));
- if (dif>1.0)
- dif=1;
- if (dif<-1.0)
- dif=-1;
- dif=acos(dif);
- dif=dif*mf_scale;
- // Which way to turn?
- if ((nx*oy)<(ny*ox))
- dif=-dif;
-
- nx=(ox*cos(dif))+(oy*sin(dif));
- ny=(oy*cos(dif))-(ox*sin(dif));
- ptr->crot=nx;
- ptr->srot=ny;
- ptr->anim=0;
- ox=(old->frame);
- oy=(old->fstep);
- nx=(newp->frame);
- ny=(newp->fstep);
- // get difference...
- dif=((nx*ox)+(ny*oy));
- if (dif>1.0)
- dif=1;
- if (dif<-1.0)
- dif=-1;
- dif=acos(dif);
- dif=dif*mf_scale;
- // Which way to turn?
- if ((nx*oy)<(ny*ox))
- dif=-dif;
- nx=(ox*cos(dif))+(oy*sin(dif));
- ny=(oy*cos(dif))-(ox*sin(dif));
- ptr->frame=nx;
- ptr->fstep=ny;
- ptr->sprite=0;
- ptr++;
- newp++;
- old++;
- }
- else
- {
- for (int i=0; i<players+3; i++)
- {
- if ((teams[i].guy_on) || (i>=players))
- {
- ptr->x=newp->x;
- ptr->y=newp->y;
- ptr->z=newp->z;
- ptr->type=newp->type;
- ptr->number=newp->number; // shirt no.
- ptr->crot=-(newp->crot);
- ptr->srot=newp->srot;
- nx=newp->anim;
- // nx=modf(nx,&n);
- ptr->anim=nx;
- nx=newp->frame;
- nx=modf(nx,&n);
- ptr->frame=nx;
- ptr->fstep=newp->fstep;
- ptr->htype=newp->htype;
- ptr->hcol=newp->hcol;
- ptr->sprite=newp->sprite;
- }
- else
- {
- ptr->type=0; //Off!
- }
- ptr++;
- newp++;
- }
- // Ball...
- ptr->x=newp->x;
- ptr->y=newp->y;
- ptr->z=newp->z;
- ptr->crot=newp->crot;
- ptr->srot=newp->srot;
- ptr->frame=newp->frame;
- ptr->fstep=newp->fstep;
- ptr->sprite=newp->sprite;
- ptr++;
- newp++;
- old++;
- }
- }
- /******************************************************************************
- *****************************************************************************/
- void sprite3d(short x,short y,short ref)
- {
- unsigned char *scr=main_buff.buff_start;
- scr+=(y*320/2)+x/2;
- if (y<400 && y>=0 && x<640 && x>=0)
- {
- if (!ref)
- *scr=31;
- else
- *scr=2;
- }
- /*
- // OUT
- switch(ref)
- {
- case(SAY_FOUL):
- speech_bubble(x,y,"FOUL!",&main_buff);
- break;
- case(SAY_PASS):
- speech_bubble(x,y,"To Me!",&main_buff);
- break;
- case(SAY_SHIT):
- speech_bubble(x,y,"Oh Dear!",&main_buff);
- break;
- case(SAY_CROSS):
- speech_bubble(x,y,"On me head!",&main_buff);
- break;
- case(SAY_OFFSIDE):
- speech_bubble(x,y,"OFFSIDE!",&main_buff);
- break;
- case(SAY_ADV):
- speech_bubble(x,y,"Play on...",&main_buff);
- break;
- case(SAY_REF):
- speech_bubble(x,y,"Ref!",&main_buff);
- break;
- case(SAY_PENALTY):
- speech_bubble(x,y,"PENALTY!",&main_buff);
- break;
- case(SAY_TIMEW):
- speech_bubble(x,y,"Time Wasting!",&main_buff);
- break;
- default:
- overlay_sprite(x,y,ref,&main_buff);
- }
- */
- }
-
|