home *** CD-ROM | disk | FTP | other *** search
- #include "ddini.h"
- #include "ResFile.h"
- #include "FastDraw.h"
- #include "mgraph.h"
- #include "mouse.h"
- #include "menu.h"
- #include "MapDiscr.h"
- #include "multipl.h"
- #include "fog.h"
- #include "walls.h"
- #include "Nature.h"
- #include <time.h>
- #include "Nucl.h"
- #include "TopZones.h"
- #include "Megapolis.h"
- #include "Dialogs.h"
- #include "fonts.h"
- #include "dpchat.h"
- #include "dplobby.h"
- #include "GSound.h"
- #include <assert.h>
- int time1,time2,time3,time4,time5;
- extern int time8;
- void processMLoadGame();
- extern char GameName[128];
- bool ContinueGame;
- extern word rpos;
- char CurrentMap[64];
- void CBar(int x,int y,int Lx,int Ly,byte c);
- void PrepareEditMedia(byte myid);
- extern bool EditMapMode;
- extern int RES[8][8];
- extern byte mapPos[16];
- void PreLoadExtendedMap(char* s);
- void PostLoadExtendedMap(char* s);
- void InitGame();
- int nsmaplx;
- int nsmaply;
- int GameMode;
- extern int LastKey;
- extern bool KeyPressed;
- void MFix();
- SQPicture MainMenuGround;
- SQPicture Panel1;
- SQPicture r128x20e;
- SQPicture r128x20p;
- SQPicture r80x20e;
- SQPicture r80x20p;
- SQPicture w106x28d;
- SQPicture r106x28e;
- SQPicture r106x28p;
- SQPicture w164x28d;
- SQPicture r164x28e;
- SQPicture r164x28p;
- SQPicture w224x28d;
- SQPicture r224x28e;
-
- SQPicture sb_up_e;
- SQPicture sb_up_p;
- SQPicture sb_up_d;
-
- SQPicture sb_dn_e;
- SQPicture sb_dn_p;
- SQPicture sb_dn_d;
-
- SQPicture sb_lf_e;
- SQPicture sb_lf_p;
- SQPicture sb_lf_d;
-
- SQPicture sb_ri_e;
- SQPicture sb_ri_p;
- SQPicture sb_ri_d;
-
- SQPicture sb_vbar;
- SQPicture sb_vbare;
- SQPicture sb_hbar;
- SQPicture sb_hbare;
-
- SQPicture sb_btn;
-
- SQPicture chk1_on;
- SQPicture chk1_off;
- SQPicture chk2_on;
- SQPicture chk2_off;
-
- SQPicture w160x160;
- SQPicture w160x256;
- SQPicture y288x256;
- SQPicture y352x352;
- SQPicture y288x128;
- SQPicture w288x256;
- SQPicture w352x352;
- SQPicture w288x128;
-
- RLCTable TPassive;
- RLCTable TActive;
- RLCTable TDisable;
- RLCFont FPassive;
- RLCFont FActive;
- RLCFont FDisable;
- extern bool CheapMode;
- int PanelLx;
- int PanelLy;
- bool MultiplayerStart;
- bool GameNeedToDraw;
- extern bool ChoosePosition;
- extern word NPlayers;
- void CloseMPL();
- void IBEnumeratePlayers(InputBox** IB);
- void LBEnumerateSessions(ListBox* LB);
- void AnalyseMessages();
- bool CreateNamedSession(char* Name);
- bool InGame;
- bool JoinNameToSession(int ns,char* Name);
- void FreeDDObjects( void );
- bool StartIGame();
- byte MyRace;
- extern LPDIRECTPLAY3A lpDirectPlay3A;
- extern word PlayerMenuMode;
- extern LPVOID lplpConnectionBuffer[16];
- void PlayVideo();
- bool ProcessMessages(){
- MSG msg;
- while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){
- if (msg.message == WM_QUIT)
- {
- //FreeDDObjects();
- //PostQuitMessage(msg.wParam);
- return true;
- }
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- return false;
- };
-
- char PlName[64];
- void ProcessHelp();
- void InitDialogs(){
- unsigned long dws=20;
- GetComputerName(PlName,&dws);
- LoadRLC("fpassive.rlc",&TPassive);
- LoadRLC("factive.rlc",&TActive);
- LoadRLC("fdisable.rlc",&TDisable);
- RegisterRLCFont(&FPassive,TPassive,0);
- RegisterRLCFont(&FActive,TActive,0);
- RegisterRLCFont(&FDisable,TDisable,0);
- MainMenuGround.LoadPicture("zast.bpx");
- Panel1.LoadPicture("panel1.bpx");
- PanelLx=Panel1.PicPtr[0];
- PanelLy=Panel1.PicPtr[1];
- //SQPicture r128x20e;
- r128x20p.LoadPicture("r128x20p.bpx");
- r128x20e.LoadPicture("r128x20e.bpx");
- r80x20e.LoadPicture("r80x20e.bpx");
- r80x20p.LoadPicture("r80x20p.bpx");
- w106x28d.LoadPicture("w106x28d.bpx");
- r106x28e.LoadPicture("r106x28e.bpx");
- r106x28p.LoadPicture("r106x28p.bpx");
- w164x28d.LoadPicture("w164x28d.bpx");
- r164x28e.LoadPicture("r164x28e.bpx");
- r164x28p.LoadPicture("r164x28p.bpx");
- w224x28d.LoadPicture("w224x28d.bpx");
- r224x28e.LoadPicture("r224x28e.bpx");
-
- sb_up_e.LoadPicture("sb_up_e.bpx");
- sb_up_p.LoadPicture("sb_up_p.bpx");
- sb_up_d.LoadPicture("sb_up_d.bpx");
-
- sb_dn_e.LoadPicture("sb_dn_e.bpx");
- sb_dn_p.LoadPicture("sb_dn_p.bpx");
- sb_dn_d.LoadPicture("sb_dn_d.bpx");
-
- sb_lf_e.LoadPicture("sb_lf_e.bpx");
- sb_lf_p.LoadPicture("sb_lf_p.bpx");
- sb_lf_d.LoadPicture("sb_lf_d.bpx");
-
- sb_ri_e.LoadPicture("sb_ri_e.bpx");
- sb_ri_p.LoadPicture("sb_ri_p.bpx");
- sb_ri_d.LoadPicture("sb_ri_d.bpx");
-
- sb_vbar.LoadPicture("sb_vbar.bpx");
- sb_vbare.LoadPicture("sb_vbare.bpx");
- sb_hbar.LoadPicture("sb_hbar.bpx");
- sb_hbare.LoadPicture("sb_hbare.bpx");
-
- sb_btn.LoadPicture("sb_btn.bpx");
-
- chk1_on.LoadPicture("chk1_on.bpx");
- chk1_off.LoadPicture("chk1_off.bpx");
- chk2_on.LoadPicture("chk2_on.bpx");
- chk2_off.LoadPicture("chk2_off.bpx");
-
- w160x160.LoadPicture("w160x160.bpx");
- w160x256.LoadPicture("w160x256.bpx");
-
- y288x256.LoadPicture("y288x256.bpx");
- y352x352.LoadPicture("y352x352.bpx");
- y288x128.LoadPicture("y288x128.bpx");
- w288x256.LoadPicture("w288x256.bpx");
- w352x352.LoadPicture("w352x352.bpx");
- w288x128.LoadPicture("w288x128.bpx");
- };
- static int ItemChoose;
-
- bool MMItemChoose(SimpleDialog* SD){
- ItemChoose=SD->UserParam;
- Lpressed=false;
- return true;
- };
- #define mcmExit 0xFF
- #define mcmSingle 0xF1
- #define mcmMulti 0xF2
- #define mcmVideo 0xF3
- #define mcmResume 0xF4
- #define mcmOk 0xF5
- #define mcmCancel 0xF6
- #define mcmLoad 0xF7
- #define mcmSave 0xF8
- #define mcmHost 0xF9
- #define mcmJoin 0xFA
- #define mcmRefresh 0xFB
- #define mcmEdit 0xFC
- #define mcmAll 0xFD
- #define mcmGraph 0xE0
- #define mcmSound 0xE1
- #define mcmSpeed 0xE2
- #define mcmSnWeapon 0xE3
- #define mcmSnBirth 0xE4
- #define mcmSnOrder 0xE5
- #define mcmSnAttack 0xE6
- #define mcmOptions 0xE7
- #define mcmHelp 0xE8
- void InstallMap(ListBox* LB,WIN32_FIND_DATA* FD){
- LB->AddItem(FD->cFileName,0);
- };
- void CreateMapsList(ListBox* LB){
- WIN32_FIND_DATA FD;
- HANDLE HF=FindFirstFile("*.wm",&FD);
- if(HF!=INVALID_HANDLE_VALUE){
- InstallMap(LB,&FD);
- while(FindNextFile(HF,&FD))InstallMap(LB,&FD);
- };
- };
- void InstallNewMap(ListBox* LB,WIN32_FIND_DATA* FD){
- LB->AddItem(FD->cFileName,0);
- };
- void CreateNewMapsList(ListBox* LB){
- WIN32_FIND_DATA FD;
- HANDLE HF=FindFirstFile("*.wm",&FD);
- if(HF!=INVALID_HANDLE_VALUE){
- InstallMap(LB,&FD);
- while(FindNextFile(HF,&FD))InstallMap(LB,&FD);
- };
- };
- //----------------Graphics menu----------------//
- bool InitScreen();
- int OldSizeX;
- int OldSizeY;
- extern LPDIRECTDRAW lpDD;
- bool CheckMode(){
- ContinueGame=false;
- DialogsSystem GMM(smapx+(nsmaplx<<4)-(288>>1),smapy+(nsmaply<<4)-(288>>1));
- Picture* PIC1=GMM.addPicture(NULL,0,0,&y288x256,&y288x256,&y288x256);
- TextButton* Mess=GMM.addTextButton(PIC1,288>>1,30,"═ε≡∞αδⁿφε ?",&FActive,&FPassive,&FDisable,1);
- TextButton* OkBtn=GMM.addTextButton(PIC1,(288>>1)-60,180,"─α",&FActive,&FPassive,&FDisable,1);
- TextButton* CancelBtn=GMM.addTextButton(PIC1,(288>>1)+60,180,"═σ≥",&FActive,&FPassive,&FDisable,1);
- OkBtn->UserParam=mcmOk;
- OkBtn->OnUserClick=&MMItemChoose;
- CancelBtn->UserParam=mcmCancel;
- CancelBtn->OnUserClick=&MMItemChoose;
- int time=GetTickCount();
- ItemChoose=-1;
- do{
- ProcessMessages();
- GMM.ProcessDialogs();
- GMM.RefreshView();
- }while(ItemChoose==-1&&GetTickCount()-time<8000);
- if(ItemChoose==mcmOk)return true;
- else return false;
-
- };
- void GSSetup800();
- void DrawAllScreen();
- extern int COPYSizeX;
- extern int RealLx;
- extern int RealLy;
- void SERROR(){
- PlayEffect(0,0,0);
- int time=GetTickCount();
- do{}while(GetTickCount()-time<1000);
- };
- void SERROR1(){
- PlayEffect(1,0,0);
- int time=GetTickCount();
- do{}while(GetTickCount()-time<1000);
- };
- void SERROR2(){
- PlayEffect(2,0,0);
- int time=GetTickCount();
- do{}while(GetTickCount()-time<1000);
- };
- bool SetGameDisplayMode(int SizeX,int SizeY){
- RealLx=SizeX;
- RealLy=SizeY;
- FreeDDObjects();
- InitScreen();
- GSSetup800();
- DrawAllScreen();
- if(CheckMode())return true;
- else{
- RealLx=OldSizeX;
- RealLy=OldSizeY;
- FreeDDObjects();
- InitScreen();
- GSSetup800();
- DrawAllScreen();
- return false;
- };
- return false;
- };
- bool ProcessGraphics(int x,int y){
- ItemChoose=-1;
- DialogsSystem MMenu(x,y);
- Picture* PIC=MMenu.addPicture(NULL,0,0,&Panel1,&Panel1,&Panel1);
- BpxTextButton* OkBtn=MMenu.addBpxTextButton(PIC,60,190,"╙╤╥└═╬┬╚╥▄",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- TextButton* BTN1=MMenu.addTextButton(PIC,PanelLx>>1,30,"╨σµΦ∞",&FActive,&FPassive,&FDisable,1);
- OkBtn->UserParam=mcmOk;
- OkBtn->OnUserClick=&MMItemChoose;
- BpxTextButton* ExitBtn=MMenu.addBpxTextButton(PIC,60,220,"┬█╒╬─",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- ExitBtn->UserParam=mcmExit;
- ExitBtn->OnUserClick=&MMItemChoose;
- CheckBox* mode800=MMenu.addCheckBox(PIC,70,70,"800x600",1,0,&chk2_on,&chk2_off,&f16x16w,&f16x16g);
- CheckBox* mode1024=MMenu.addCheckBox(PIC,70,100,"1024x768",1,0,&chk2_on,&chk2_off,&f16x16w,&f16x16g);
- CheckBox* mode1152=MMenu.addCheckBox(PIC,70,130,"1152x864",1,0,&chk2_on,&chk2_off,&f16x16w,&f16x16g);
- CheckBox* mode1280=MMenu.addCheckBox(PIC,70,160,"1280x1024",1,0,&chk2_on,&chk2_off,&f16x16w,&f16x16g);
- if(RealLx==800)mode800->State=true;
- if(RealLx==1024)mode1024->State=true;
- if(RealLx==1152)mode1152->State=true;
- if(RealLx==1280)mode1280->State=true;
- do{
- ProcessMessages();
- MMenu.MarkToDraw();
- MMenu.ProcessDialogs();
- MMenu.RefreshView();
- }while(ItemChoose==-1);
- if(ItemChoose==mcmOk){
- if((RealLx==800&&mode800->State)||
- (RealLx==1024&&mode1024->State)||
- (RealLx==1152&&mode1152->State)||
- (RealLx==1280&&mode1280->State))return false;
- //Set mode
- OldSizeX=RealLx;
- OldSizeY=RealLy;
- int msizex=800,msizey=600;
- if(mode1024->State){
- msizex=1024;
- msizey=768;
- };
- if(mode1152->State){
- msizex=1152;
- msizey=864;
- };
- if(mode1280->State){
- msizex=1280;
- msizey=1024;
- };
- if(SetGameDisplayMode(msizex,msizey)){
- ContinueGame=true;
- return true;
- };
- };
- return false;
- };
- //-----------------Speed menu------------------//
- int FPSTime;
- void ProcessSpeed(int x,int y){
- ItemChoose=-1;
- DialogsSystem MMenu(x,y);
- Picture* PIC=MMenu.addPicture(NULL,0,0,&Panel1,&Panel1,&Panel1);
- BpxTextButton* ExitBtn=MMenu.addBpxTextButton(PIC,60,220,"┬█╒╬─",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- ExitBtn->UserParam=mcmExit;
- ExitBtn->OnUserClick=&MMItemChoose;
- if(FPSTime>100)FPSTime=100;
- if(FPSTime<0)FPSTime=0;
- VScrollBar* HB=MMenu.addHScrollBar(PIC,40,100,100,100-FPSTime,&sb_lf_d,&sb_lf_e,&sb_lf_p,&sb_ri_d,&sb_ri_e,&sb_ri_p,&sb_hbare,&sb_hbar,&sb_btn);
- MMenu.addTextButton(PIC,PanelLx>>1,20,"╤Ωε≡ε±≥ⁿ Φπ≡√",&FActive,&FPassive,&FDisable,1);
- MMenu.addTextButton(PIC,50,95+30,"╠Φφ.",&FActive,&FPassive,&FDisable,1);
- MMenu.addTextButton(PIC,235,95+30,"╠αΩ±.",&FActive,&FPassive,&FDisable,1);
- do{
- ProcessMessages();
- MMenu.MarkToDraw();
- MMenu.ProcessDialogs();
- MMenu.RefreshView();
- }while(ItemChoose==-1);
- FPSTime=100-HB->SPos;
- };
- //----------------SOUND----------------
- int WarSound;
- int WorkSound;
- int OrderSound;
- int MidiSound;
- void ProcessSound(int x,int y){
- ItemChoose=-1;
- DialogsSystem MMenu(x,y);
- Picture* PIC=MMenu.addPicture(NULL,0,0,&Panel1,&Panel1,&Panel1);
- BpxTextButton* ExitBtn=MMenu.addBpxTextButton(PIC,60,220,"┬█╒╬─",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- ExitBtn->UserParam=mcmExit;
- ExitBtn->OnUserClick=&MMItemChoose;
- if(FPSTime>100)FPSTime=100;
- if(FPSTime<0)FPSTime=0;
- if(WarSound>0)WarSound=0;
- if(OrderSound>0)OrderSound=0;
- if(WorkSound>0)WorkSound=0;
- if(WarSound<-1000)WarSound=-1000;
- if(WorkSound<-1000)WorkSound=-1000;
- if(OrderSound<-1000)OrderSound=-1000;
- if(MidiSound<-1000)MidiSound=-1000;
- MMenu.addTextButton(PIC,PanelLx>>1,20,"├≡ε∞Ωε±≥ⁿ",&FActive,&FPassive,&FDisable,1);
- MMenu.addTextButton(PIC,PanelLx>>1,60,"╟Γ≤ΩΦ ΓεΘφ√",&f16x16w,&f16x16w,&f16x16w,1);
- VScrollBar* HB1=MMenu.addHScrollBar(PIC,40,80,1000,1000+WarSound,&sb_lf_d,&sb_lf_e,&sb_lf_p,&sb_ri_d,&sb_ri_e,&sb_ri_p,&sb_hbare,&sb_hbar,&sb_btn);
- MMenu.addTextButton(PIC,PanelLx>>1,110,"╨αßε≥α",&f16x16w,&f16x16w,&f16x16w,1);
- VScrollBar* HB2=MMenu.addHScrollBar(PIC,40,130,1000,1000+WorkSound,&sb_lf_d,&sb_lf_e,&sb_lf_p,&sb_ri_d,&sb_ri_e,&sb_ri_p,&sb_hbare,&sb_hbar,&sb_btn);
- MMenu.addTextButton(PIC,PanelLx>>1,160,"╬≥Γσ≥ φα ∩≡ΦΩατ",&f16x16w,&f16x16w,&f16x16w,1);
- VScrollBar* HB3=MMenu.addHScrollBar(PIC,40,180,1000,1000+OrderSound,&sb_lf_d,&sb_lf_e,&sb_lf_p,&sb_ri_d,&sb_ri_e,&sb_ri_p,&sb_hbare,&sb_hbar,&sb_btn);
- do{
- ProcessMessages();
- MMenu.MarkToDraw();
- MMenu.ProcessDialogs();
- MMenu.RefreshView();
- if(HB1->SPos-1000!=WarSound)PlayEffect(2,(rand()&1024)-512,HB1->SPos-1000);
- if(HB2->SPos-1000!=WorkSound)PlayEffect(0,(rand()&1024)-512,HB2->SPos-1000);
- if(HB3->SPos-1000!=OrderSound)PlayEffect(9,(rand()&1024)-512,HB3->SPos-1000);
- WarSound=HB1->SPos-1000;
- WorkSound=HB2->SPos-1000;
- OrderSound=HB3->SPos-1000;
- }while(ItemChoose==-1);
- };
- //-----------------Options menu----------------//
- void ProcessOptions(int x,int y){
- ItemChoose=-1;
- DialogsSystem MMenu(x,y);
- Picture* PIC=MMenu.addPicture(NULL,0,0,&Panel1,&Panel1,&Panel1);
- BpxTextButton* ExitBtn=MMenu.addBpxTextButton(PIC,60,220,"┬█╒╬─",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- ExitBtn->UserParam=mcmExit;
- ExitBtn->OnUserClick=&MMItemChoose;
- TextButton* BTN1=MMenu.addTextButton(PIC,PanelLx>>1,30,"├≡α⌠ΦΩα",&FActive,&FPassive,&FDisable,1);
- BTN1->UserParam=mcmGraph;
- BTN1->OnUserClick=&MMItemChoose;
- TextButton* BTN2=MMenu.addTextButton(PIC,PanelLx>>1,70,"╟Γ≤Ω",&FActive,&FPassive,&FDisable,1);
- BTN2->UserParam=mcmSound;
- BTN2->OnUserClick=&MMItemChoose;
- TextButton* BTN4=MMenu.addTextButton(PIC,PanelLx>>1,110,"╤Ωε≡ε±≥ⁿ",&FActive,&FPassive,&FDisable,1);
- BTN4->UserParam=mcmEdit;
- BTN4->OnUserClick=&MMItemChoose;
- ItemChoose=-1;
- do{
- ProcessMessages();
- MMenu.ProcessDialogs();
- MMenu.RefreshView();
- }while(ItemChoose==-1);
- if(ItemChoose==mcmGraph){
- ProcessGraphics(x,y);
- };
- if(ItemChoose==mcmEdit){
- ProcessSpeed(x,y);
- };
- if(ItemChoose==mcmSound){
- ProcessSound(x,y);
- };
- };
- //-----------------SINGLE PLAYER---------------//
- void UnLoading();
- static byte Ntn[8];
- bool NatChoose(SimpleDialog* SD){
- BpxTextButton* TB=(BpxTextButton*)SD;
- char* qq=TB->Message;
- if(qq[0]=='╬')strcpy(TB->Message,"╦▐─╚");
- else strcpy(TB->Message,"╬╨╩╚");
- SD->NeedToDraw=true;
- Lpressed=true;
- return true;
- };
- int coorX[8];
- int coorY[8];
- void setCoor(){
- for(int i=0;i<8;i++){
- coorX[i]=-1;
- coorY[i]=-1;
- };
- };
- void chooseCoor(int* xx,int* yy){
- int x,y;
- do{
- x=div(int(rando())*(msx-16),32768).quot;
- y=div(int(rando())*(msy-16),32768).quot;
- //checking for distance from enemy
- bool ok=true;
- for(int j=0;j<8;j++){
- if(coorX[j]!=-1&&abs(coorX[j]-x)+abs(coorY[j]-y)<25)ok=false;
- };
- if(ok){
- //checking for empty space
- for(int dx=0;dx<16;dx++)
- for(int dy=0;dy<16;dy++)
- if(LLock[y+dy][x+dx]){
- ok=false;
- goto hhh;
- };
- hhh: if(ok){
- *xx=x;
- *yy=y;
- return;
- };
- };
- }while(true);
- };
- void LoadNation(char* fn,byte msk,byte NIndex);
- extern City CITY[8];
- void processSinglePlayer(){
- int mmlx=MainMenuGround.PicPtr[0];
- int mmly=MainMenuGround.PicPtr[1];
- //MainMenuGround.Draw((RSCRSizeX-mmlx)>>1,(RSCRSizeY-mmly)>>1);
- DialogsSystem DSY(((RealLx-352)>>1)-130,((RSCRSizeY-352)>>1)+64);
- //choose map
- Picture* Pic=DSY.addPicture(NULL,352+20,0,&y288x256,&y288x256,&y288x256);
- DSY.addTextButton(Pic,352+(352>>1)-10,20,"┬√ßσ≡Φ≥σ Ωα≡≥≤",&FActive,&FPassive,&FDisable,1);
- ListBox* LB=DSY.addListBox(Pic,352+60-15,60,6,&r224x28e,&f16x16g,&f16x16w,NULL);
- VScrollBar* VS=DSY.addVScrollBar(Pic,LB->x-DSY.BaseX+LB->oneLx-1,1+LB->y-DSY.BaseY,1000,4,&sb_up_d,&sb_up_e,&sb_up_p,&sb_dn_d,&sb_dn_e,&sb_dn_p,&sb_vbare,&sb_vbar,&sb_btn);
- VS->SPos=0;
- LB->VS=VS;
- //choose opponents
- Picture* PIC=DSY.addPicture(NULL,0,0,&y352x352,&y352x352,&y352x352);
- //DSY.addTextButton(PIC,352>>1,20,"┬√ßσ≡Φ≥σ ∩≡ε≥ΦΓφΦΩεΓ",&FActive,&FPassive,&FDisable,1);
- //CheckBox* CHME[8]; //choose my nation
- CheckBox* CHTHEM[8]; //choose enabled nation
- BpxTextButton* NCH[8]; //choose nation
- int y=30;
- DSY.addTextButton(Pic,30+40,y-10,"┬√:",&FActive,&FActive,&FActive,1);
- DSY.addTextButton(Pic,95+70,y+28,"╧╨╬╥╚┬═╚╩╚:",&FPassive,&FPassive,&FPassive,1);
- NCH[0]=DSY.addBpxTextButton(PIC,110,y-8,"╬╨╩╚",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- NCH[0]->OnUserClick=&NatChoose;
- y+=60;
- for(int i=1;i<8;i++){
- CHTHEM[i]=DSY.addCheckBox(PIC,70,y,"",0,1,&chk1_on,&chk1_off,&f16x16w,&f16x16g);
- //if(!i)CHME[i]=DSY.addCheckBox(PIC,90,y,"",1,1,&chk2_on,&chk2_off,&f16x16w,&f16x16g);
- //else CHME[i]=DSY.addCheckBox(PIC,90,y,"",1,0,&chk2_on,&chk2_off,&f16x16w,&f16x16g);
- NCH[i]=DSY.addBpxTextButton(PIC,110,y,"╬╨╩╚",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- y+=30;
- NCH[i]->OnUserClick=&NatChoose;
- };
- BpxTextButton* OkBtn=DSY.addBpxTextButton(PIC,10,y+10,"OK",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- OkBtn->UserParam=mcmOk;
- OkBtn->OnUserClick=&MMItemChoose;
- BpxTextButton* CancelBtn=DSY.addBpxTextButton(PIC,180,y+10,"╬╥╠┼═└",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- CancelBtn->UserParam=mcmCancel;
- CancelBtn->OnUserClick=&MMItemChoose;
- //Create list of maps
- CreateMapsList(LB);
- ItemChoose=-1;
- do{
- /*
- //rando();
- for(i=0;i<8;i++){
- if(!CHTHEM[i]->State){
- //CHME[i]->Enabled=false;
- NCH[i]->Enabled=false;
- //CHME[i]->NeedToDraw=true;
- NCH[i]->NeedToDraw=true;
- }else{
- //CHME[i]->Enabled=true;
- NCH[i]->Enabled=true;
- CHME[i]->NeedToDraw=true;
- NCH[i]->NeedToDraw=true;
- };
- };
- for(i=0;i<8;i++){
- if(CHME[i]->State&&!CHME[i]->Enabled){
- for(int j=0;j<8;j++)CHME[j]->State=false;
- for(j=0;j<8;j++){
- if(CHME[(i+j)&7]->Enabled){
- CHME[(i+j)&7]->State=true;
- goto uuu;
- };
- };
- uuu:;
- };
- };
- bool cc=false;
- for(i=0;i<8;i++)if(CHME[i]->State)cc=true;
- int nc=0;
- int cp=-1;
- for(i=0;i<8;i++){
- if(CHTHEM[i]->State){
- nc++;
- cp=i;
- };
- };
- if(nc==1)CHME[cp]->State=true;
- OkBtn->Enabled=cc;*/
- if(LB->CurItem==-1)OkBtn=false;
- OkBtn->NeedToDraw=true;
- DSY.MarkToDraw();
- ProcessMessages();
- DSY.ProcessDialogs();
- DSY.RefreshView();
- }while(ItemChoose==-1);
- if(ItemChoose==mcmOk){
- //setCoor();
- UnLoading();
- PreLoadExtendedMap((LB->GetItem(LB->CurItem))->Message);
- MyNation=0;
- memcpy(&RESRC[0][0],&RES[0][0],sizeof RES);
- for(i=0;i<8;i++){
- byte mss=254;
- if(!i)mss=1;
- if(NCH[i]->Message[0]=='╬')
- LoadNation("orcs.nds",mss,i);
- else LoadNation("PEOPLES.nds",mss,i);
- //if(CHME[i]->State)MyNation=i;
- int xx,yy;
- //chooseCoor(&xx,&yy);
- xx=mapPos[i*2];
- yy=mapPos[i*2+1];
- CITY[i].CreateCity(xx+4,yy+4,i);
- if((!i)||CHTHEM[i]->State){
- //coorX[i]=xx;
- //coorY[i]=yy;
- NATIONS[i].CreateTerrainAt(xx,yy,1);
- if(i==MyNation){
- mapx=xx-(smaplx>>1);
- mapy=yy-(smaply>>1);
- if(mapx<1)mapx=1;
- if(mapy<1)mapy=1;
- if(mapx+smaplx>=msx)mapx=msx-smaplx-1;
- if(mapy+smaply>=msy)mapy=msy-smaply-1;
- };
- if(i)CITY[i].IntellectEnabled=true;
- };
- };
- PostLoadExtendedMap((LB->GetItem(LB->CurItem))->Message);
- CheapMode=false;
- InitGame();
- ItemChoose=mcmSingle;
- InitExplosions();
- PrepareToGame();
- };
- };
- //-----------------WAITING FOR OPPONENTS(HOST)-------------------//
- bool processHostConnection(){
- DialogsSystem DSY((RealLx-352)>>1,RSCRSizeY-352-120);
- //choose map
- Picture* Pic=DSY.addPicture(NULL,0,0,&y352x352,&y352x352,&y352x352);
- DSY.addTextButton(Pic,352>>1,20,"╞Σσ∞ ±ε∩σ≡φΦΩεΓ...",&FActive,&FPassive,&FDisable,1);
- char GamersNames[8][32];
- int yy=60;
- InputBox* IBN[8];
- for(int i=0;i<8;i++){
- GamersNames[i][0]=0;
- IBN[i]=DSY.addInputBox(Pic,65,yy,GamersNames[i],20,&r224x28e,&f16x16w,&f16x16g);
- yy+=28;
- };
- BpxTextButton* OkBtn=DSY.addBpxTextButton(Pic,10,314,"═α≈α≥ⁿ Φπ≡≤",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- OkBtn->UserParam=mcmJoin;
- OkBtn->OnUserClick=&MMItemChoose;
- BpxTextButton* CancelBtn=DSY.addBpxTextButton(Pic,180,314,"╬╥╠┼═└",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- CancelBtn->UserParam=mcmCancel;
- CancelBtn->OnUserClick=&MMItemChoose;
- ItemChoose=-1;
- PlayerMenuMode=true;
- do{
- ProcessMessages();
- AnalyseMessages();
- OkBtn->NeedToDraw=true;
- if(NPlayers>1)OkBtn->Enabled=true;
- else OkBtn->Enabled=false;
- IBEnumeratePlayers(IBN);
- DSY.MarkToDraw();
- DSY.ProcessDialogs();
- DSY.RefreshView();
- }while(ItemChoose==-1&&PlayerMenuMode);
- if(ItemChoose==mcmCancel){
- CloseMPL();
- }else{
- if(ItemChoose==mcmJoin){
- StartIGame();
- return true;
- };
- };
- return false;
- };
- //-----------------WAITING FOR OPPONENTS(JOIN)-------------------//
- bool processJoinConnection(){
- DialogsSystem DSY((RealLx-352)>>1,RSCRSizeY-352-120);
- //choose map
- Picture* Pic=DSY.addPicture(NULL,0,0,&y352x352,&y352x352,&y352x352);
- DSY.addTextButton(Pic,352>>1,20,"╞Σσ∞ ±ε∩σ≡φΦΩεΓ...",&FActive,&FPassive,&FDisable,1);
- char GamersNames[8][32];
- int yy=60;
- InputBox* IBN[8];
- for(int i=0;i<8;i++){
- GamersNames[i][0]=0;
- IBN[i]=DSY.addInputBox(Pic,65,yy,GamersNames[i],20,&r224x28e,&f16x16w,&f16x16g);
- yy+=28;
- };
- //BpxTextButton* OkBtn=DSY.addBpxTextButton(Pic,10,314,"═α≈α≥ⁿ Φπ≡≤",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- //OkBtn->UserParam=mcmJoin;
- //OkBtn->OnUserClick=&MMItemChoose;
- BpxTextButton* CancelBtn=DSY.addBpxTextButton(Pic,180,314,"╬╥╠┼═└",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- CancelBtn->UserParam=mcmCancel;
- CancelBtn->OnUserClick=&MMItemChoose;
- ItemChoose=-1;
- PlayerMenuMode=1;
- do{
- ProcessMessages();
- AnalyseMessages();
- IBEnumeratePlayers(IBN);
- DSY.MarkToDraw();
- DSY.ProcessDialogs();
- DSY.RefreshView();
- }while(ItemChoose==-1&&PlayerMenuMode);
- if(ItemChoose==mcmCancel){
- CloseMPL();
- }else{
- if(!PlayerMenuMode)return true;
- };
- return false;
- };
- //--------------------JOIN TO SESSION---------------------//
- bool processJoinGame(){
- DialogsSystem DSY((RealLx-352)>>1,RSCRSizeY-352-120);
- //choose map
- Picture* Pic=DSY.addPicture(NULL,0,0,&y352x352,&y352x352,&y352x352);
- DSY.addTextButton(Pic,352>>1,20,"┬√ßσ≡Φ≥σ Φπ≡≤",&FActive,&FPassive,&FDisable,1);
- ListBox* LB=DSY.addListBox(Pic,60,90,6,&r224x28e,&f16x16g,&f16x16w,NULL);
- VScrollBar* VS=DSY.addVScrollBar(Pic,LB->x-DSY.BaseX+LB->oneLx-1,1+LB->y-DSY.BaseY,1000,4,&sb_up_d,&sb_up_e,&sb_up_p,&sb_dn_d,&sb_dn_e,&sb_dn_p,&sb_vbare,&sb_vbar,&sb_btn);
- LB->VS=VS;
- BpxTextButton* OkBtn=DSY.addBpxTextButton(Pic,10,314,"╧≡Φ±εσΣΦφΦ≥ⁿ± ",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- OkBtn->UserParam=mcmJoin;
- OkBtn->OnUserClick=&MMItemChoose;
- BpxTextButton* CancelBtn=DSY.addBpxTextButton(Pic,180,314,"╬╥╠┼═└",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- CancelBtn->UserParam=mcmCancel;
- CancelBtn->OnUserClick=&MMItemChoose;
- BpxTextButton* RefreshBtn=DSY.addBpxTextButton(Pic,10+90,314-40,"╬ßφεΓΦ≥ⁿ ±∩Φ±εΩ",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- RefreshBtn->UserParam=mcmRefresh;
- RefreshBtn->OnUserClick=&MMItemChoose;
- LBEnumerateSessions(LB);
- do{
- ItemChoose=-1;
- do{
- ProcessMessages();
- OkBtn->NeedToDraw=true;
- if(LB->CurItem==-1)OkBtn->Enabled=false;
- else OkBtn->Enabled=true;
- DSY.MarkToDraw();
- DSY.ProcessDialogs();
- DSY.RefreshView();
- if(ItemChoose==mcmRefresh){
- LBEnumerateSessions(LB);
- ItemChoose=-1;
- };
- }while(ItemChoose==-1);
- if(ItemChoose==mcmJoin&&LB->CurItem!=-1){
- JoinNameToSession(LB->CurItem,PlName);
- if(processJoinConnection())return true;
- };
- }while(ItemChoose!=mcmCancel);
- return false;
- };
- //--------------------HOST THE SESSION---------------------//
- bool processHostGame(){
- DialogsSystem DSY((RealLx-352)>>1,RSCRSizeY-352-120);
- //choose map
- Picture* Pic=DSY.addPicture(NULL,0,0,&y352x352,&y352x352,&y352x352);
- DSY.addTextButton(Pic,352>>1,20,"┬√ßσ≡Φ≥σ Ωα≡≥≤",&FActive,&FPassive,&FDisable,1);
- ListBox* LB=DSY.addListBox(Pic,60,90,6,&r224x28e,&f16x16g,&f16x16w,NULL);
- VScrollBar* VS=DSY.addVScrollBar(Pic,LB->x-DSY.BaseX+LB->oneLx-1,1+LB->y-DSY.BaseY,1000,4,&sb_up_d,&sb_up_e,&sb_up_p,&sb_dn_d,&sb_dn_e,&sb_dn_p,&sb_vbare,&sb_vbar,&sb_btn);
- LB->VS=VS;
- CreateMapsList(LB);
- BpxTextButton* OkBtn=DSY.addBpxTextButton(Pic,10,314,"╤╬╟─└╥▄ ╚├╨╙",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- OkBtn->UserParam=mcmHost;
- OkBtn->OnUserClick=&MMItemChoose;
- BpxTextButton* CancelBtn=DSY.addBpxTextButton(Pic,180,314,"╬╥╠┼═└",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- CancelBtn->UserParam=mcmCancel;
- CancelBtn->OnUserClick=&MMItemChoose;
- ItemChoose=-1;
- do{
- do{
- ProcessMessages();
- DSY.MarkToDraw();
- DSY.ProcessDialogs();
- DSY.RefreshView();
- }while(ItemChoose==-1);
- if(ItemChoose==mcmHost&&LB->CurItem!=-1){
- strcpy(CurrentMap,(LB->GetItem(LB->CurItem))->Message);
- if(CreateNamedSession(PlName))
- if(processHostConnection())return true;
- };
- }while(ItemChoose!=mcmCancel);
- return false;
- };
- //--------------------MULTIPLAYER GAME---------------------//
- char SaveFileName[128];
- void processMultiplayer(){
- sprintf(SaveFileName,"Save %d",GetTickCount());
- CreateMultiplaterInterface();
- if(!lpDirectPlay3A)return;
- if FAILED(lpDirectPlay3A->InitializeConnection(
- lplpConnectionBuffer[0],0)) return;
- //Multiplayer interface is now created
- DialogsSystem DSY((RealLx-352)>>1,RSCRSizeY-352-120);
- Picture* PIC=DSY.addPicture(NULL,0,0,&y352x352,&y352x352,&y352x352);
- TextButton* BTN1=DSY.addTextButton(PIC,352>>1,20,"╚π≡α ∩ε ±σ≥Φ (IPX)",&FActive,&FPassive,&FDisable,1);
- BpxTextButton* HostBtn=DSY.addBpxTextButton(PIC,10,280,"╤ετΣα≥ⁿ Φπ≡≤",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- HostBtn->UserParam=mcmHost;
- HostBtn->OnUserClick=&MMItemChoose;
- BpxTextButton* JoinBtn=DSY.addBpxTextButton(PIC,180,280,"╧≡Φ±εσΣΦφΦ≥ⁿ± ",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- JoinBtn->UserParam=mcmJoin;
- JoinBtn->OnUserClick=&MMItemChoose;
- BpxTextButton* CancelBtn=DSY.addBpxTextButton(PIC,180-90,315,"╬╥╠┼═└",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- CancelBtn->UserParam=mcmCancel;
- CancelBtn->OnUserClick=&MMItemChoose;
- TextButton* BTN2=DSY.addTextButton(PIC,(352>>1)-130+20,90-8-20,"Φ∞ :",&FActive,&FPassive,&FDisable,1);
- InputBox* IB=DSY.addInputBox(PIC,80+20,92-8-20,PlName,20,&r224x28e,&f16x16w,&f16x16g);
- TextButton* BTN8=DSY.addTextButton(PIC,(352>>1),200,"└Γ≥ε±ε⌡≡αφσφΦσ",&FActive,&FPassive,&FDisable,1);
- InputBox* SavN=DSY.addInputBox(PIC,70,240,SaveFileName,20,&r224x28e,&f16x16w,&f16x16g);
- CheckBox* ORCS=DSY.addCheckBox(PIC,100,120," ╬≡ΩΦ",1,1,&chk2_on,&chk2_off,&FActive,&FPassive);
- CheckBox* PEOP=DSY.addCheckBox(PIC,100,160," ╦■ΣΦ",1,0,&chk2_on,&chk2_off,&FActive,&FPassive);
- do{
- ItemChoose=-1;
- do{
- ProcessMessages();
- DSY.MarkToDraw();
- DSY.ProcessDialogs();
- DSY.RefreshView();
- }while(ItemChoose==-1);
- if(ORCS->State)MyRace=0;
- if(PEOP->State)MyRace=1;
- if(ItemChoose==mcmHost){
- if(processHostGame())return;
- }else if(ItemChoose==mcmJoin)if(processJoinGame())return;
- }while(ItemChoose!=mcmCancel);
- };
- //--------------------RESOURCE EDITOR----------------------//
- int ProcessResEdit(){
- //ContinueGame=false;
- DialogsSystem GMM(smapx+(nsmaplx<<4)-(352>>1),smapy+(nsmaply<<4)-(352>>1));
- Picture* PIC1=GMM.addPicture(NULL,0,0,&y352x352,&y352x352,&y352x352);
- TextButton* ExitBtn=GMM.addTextButton(PIC1,352>>1,30,"╨┼╤╙╨╤█",&FActive,&FPassive,&FDisable,1);
- char XX[12];
- char GoldST[22];
- char WoodST[22];
- char OilST[22];
- itoa(RES[MyNation][1],GoldST,10);
- itoa(RES[MyNation][2],WoodST,10);
- itoa(RES[MyNation][3],OilST,10);
- strcpy(XX,"╚π≡εΩ ");
- itoa(MyNation+1,&XX[6],10);
- TextButton* PLID=GMM.addTextButton(PIC1,352>>1,30+40,XX,&FActive,&FPassive,&FDisable,1);
- TextButton* GoldBtn=GMM.addTextButton(PIC1,40,30+80,"Gold:",&f16x16w,&f16x16w,&f16x16w,1);
- InputBox* GoldIB=GMM.addInputBox(PIC1,90,30+80,GoldST,20,&r224x28e,&f16x16w,&f16x16g);
- TextButton* WoodBtn=GMM.addTextButton(PIC1,40,30+120,"Wood:",&f16x16w,&f16x16w,&f16x16w,1);
- InputBox* WoodIB=GMM.addInputBox(PIC1,90,30+120,WoodST,20,&r224x28e,&f16x16w,&f16x16g);
- TextButton* OilBtn=GMM.addTextButton(PIC1,40,30+160,"Oil:",&f16x16w,&f16x16w,&f16x16w,1);
- InputBox* OilIB=GMM.addInputBox(PIC1,90,30+160,OilST,20,&r224x28e,&f16x16w,&f16x16g);
- BpxTextButton* OkBtn=
- GMM.addBpxTextButton(PIC1,((352-164)>>1)-85,280,"OK",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- BpxTextButton* CancelBtn=
- GMM.addBpxTextButton(PIC1,((352-164)>>1)+85,280,"╬╥╠┼═└",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- OkBtn->UserParam=mcmOk;
- OkBtn->OnUserClick=&MMItemChoose;
- CancelBtn->UserParam=mcmCancel;
- CancelBtn->OnUserClick=&MMItemChoose;
- BpxTextButton* AllBtn=
- GMM.addBpxTextButton(PIC1,((352-164)>>1)+85,315,"─╦▀ ┬╤┼╒",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- AllBtn->UserParam=mcmAll;
- AllBtn->OnUserClick=&MMItemChoose;
-
- stg:
- ItemChoose=-1;
- do{
- GMM.MarkToDraw();
- RES[MyNation][1]=atoi(GoldST);
- RES[MyNation][2]=atoi(WoodST);
- RES[MyNation][3]=atoi(OilST);
- ProcessMessages();
- GMM.ProcessDialogs();
- GMM.RefreshView();
- }while(ItemChoose==-1);
- if(ItemChoose==mcmAll){
- int G=RES[MyNation][1];
- int W=RES[MyNation][2];
- int O=RES[MyNation][3];
- for(int i=0;i<8;i++){
- RES[i][1]=G;
- RES[i][2]=W;
- RES[i][3]=O;
- };
- };
- return ItemChoose;
- };
- //---------------------------------------------------------//
- int processMainMenu(){
- MMStart:
- InGame=false;
- GameMode=1;
- SetRLCWindow(0,0,RealLx,RSCRSizeY,SCRSizeX);
- NPlayers=1;
- MultiplayerStart=false;
- ItemChoose=-1;
- CBar(0,0,RealLx,RSCRSizeY,0);
- LoadPalette("015w.pal");
- int mmlx=MainMenuGround.PicPtr[0];
- int mmly=MainMenuGround.PicPtr[1];
- MainMenuGround.Draw((RealLx-mmlx)>>1,(RSCRSizeY-mmly)>>1);
- PlayerMenuMode=1;
- FlipPages();
- DialogsSystem MMenu((RealLx-PanelLx)>>1,RSCRSizeY-PanelLy-80);
- Picture* PIC=MMenu.addPicture(NULL,0,0,&Panel1,&Panel1,&Panel1);
- BpxTextButton* ExitBtn=MMenu.addBpxTextButton(PIC,60,220,"┬█╒╬─",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- ExitBtn->UserParam=mcmExit;
- ExitBtn->OnUserClick=&MMItemChoose;
- TextButton* BTN1=MMenu.addTextButton(PIC,PanelLx>>1,30,"╬ΣΦφε≈φα Φπ≡α",&FActive,&FPassive,&FDisable,1);
- BTN1->UserParam=mcmSingle;
- BTN1->OnUserClick=&MMItemChoose;
- TextButton* BTN2=MMenu.addTextButton(PIC,PanelLx>>1,65,"╚π≡α ∩ε ±σ≥Φ",&FActive,&FPassive,&FDisable,1);
- BTN2->UserParam=mcmMulti;
- BTN2->OnUserClick=&MMItemChoose;
- TextButton* BTNL=MMenu.addTextButton(PIC,PanelLx>>1,100,"╟απ≡≤τΦ≥ⁿ Φπ≡≤",&FActive,&FPassive,&FDisable,1);
- BTNL->UserParam=mcmLoad;
- BTNL->OnUserClick=&MMItemChoose;
- TextButton* BTN4=MMenu.addTextButton(PIC,PanelLx>>1,135,"╨σΣαΩ≥ε≡ Ωα≡≥√",&FActive,&FPassive,&FDisable,1);
- BTN4->UserParam=mcmEdit;
- BTN4->OnUserClick=&MMItemChoose;
- TextButton* BTN3=MMenu.addTextButton(PIC,PanelLx>>1,170,"┬ΦΣσε",&FActive,&FPassive,&FDisable,1);
- BTN3->UserParam=mcmVideo;
- BTN3->OnUserClick=&MMItemChoose;
- do{
- ProcessMessages();
- MMenu.ProcessDialogs();
- MMenu.RefreshView();
- }while(ItemChoose==-1);
- if(ItemChoose==mcmSingle)processSinglePlayer();
- if(ItemChoose==mcmEdit){
- PrepareEditMedia(0);
- ItemChoose=mcmSingle;
- };
- if(ItemChoose==mcmLoad){
- processMLoadGame();
- };
- if(ItemChoose==mcmVideo){
- PlayVideo();
- goto MMStart;
- };
- if(ItemChoose==mcmMulti)processMultiplayer();
- GameMode=0;
- return ItemChoose;
- };
- //--------------=< G A M E S C R E E N >=------------//
- extern int PrpX;
- extern int PrpY;
- extern int PrpNx;
- extern int PrpNy;
- extern int AblX;
- extern int AblY;
- extern int AblNx;
- extern int AblNy;
- extern int IconLx;
- //extern int IconLx;
- extern int IconLy;
- DialogsSystem GSYS(0,0);
- SimpleDialog* GVPort;
- SimpleDialog* MiniVPort;
- SimpleDialog* AblVPort;
- SimpleDialog* PrpVPort;
- Picture* Pan1;
- Picture* Pan2;
- Picture* Pan3;
- ColoredBar* Pan4;
- ColoredBar* Pan5;
- bool GameExit;
- int MenuType;
- bool MakeMenu;
-
- int NNames;
- char* names[128];
- char* fnames[128];
- int serials[128];
- void ClearNames(){
- for(int i=0;i<128;i++)names[i]=NULL;
- NNames=0;
- };
- void FreeNames(){
- for(int i=0;i<128;i++)if(names[i]){
- free(names[i]);
- free(fnames[i]);
- names[i]=NULL;
- fnames[i]=NULL;
- };
- NNames=0;
- };
- void ErrorBox(char* str){
- DialogsSystem DSY(smapx+(nsmaplx<<4)-(288>>1),smapy+(nsmaply<<4)-(128>>1));
- Picture* PIC1=DSY.addPicture(NULL,0,0,&w288x128,&w288x128,&w288x128);
- DSY.addTextButton(PIC1,288>>1,30,str,&f16x16w,&f16x16w,&f16x16w,1);
- BpxTextButton* OkBtn=DSY.addBpxTextButton(PIC1,(288-164)>>1,80,"OK",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- OkBtn->UserParam=mcmOk;
- OkBtn->OnUserClick=&MMItemChoose;
- do{
- ProcessMessages();
- DSY.ProcessDialogs();
- DSY.RefreshView();
- }while(ItemChoose==-1);
- };
- extern int sfVersion;
- void InstallName(ListBox* LB,WIN32_FIND_DATA* FD){
- ResFile ff1=RReset(FD->cFileName);
- char nam[128];
- if(!IOresult()){
- int sig,lap;
- RBlockRead(ff1,&sig,4);
- if(sig=='WSF2'){
- RBlockRead(ff1,&sig,4);
- RBlockRead(ff1,&lap,4);
- if(sig==sfVersion&&NNames<128){
- int nlen=0;
- RBlockRead(ff1,&nlen,2);
- nlen=0;
- RBlockRead(ff1,&nlen,1);
- RBlockRead(ff1,nam,nlen);
- RClose(ff1);
- LB->AddItem(nam,NNames);
- names[NNames]=new char[strlen(nam)+1];
- fnames[NNames]=new char[strlen(FD->cFileName)+1];
- serials[NNames]=lap;
- strcpy(names[NNames],nam);
- strcpy(fnames[NNames],FD->cFileName);
- NNames++;
- }else RClose(ff1);
- }else RClose(ff1);
- };
- };
- void CreateGamesList(ListBox* LB){
- WIN32_FIND_DATA FD;
- ClearNames();
- HANDLE HF=FindFirstFile("*.sav",&FD);
- if(HF!=INVALID_HANDLE_VALUE){
- InstallName(LB,&FD);
- while(FindNextFile(HF,&FD))InstallName(LB,&FD);
- };
- };
- //----------------LOAD GAME--------------//
- void CmdLoadNetworkGame(byte NI,int ID,char* Name);
- void LoadGame(char* fnm);
- void ProcessGLoadGame(){
- DialogsSystem DSY(smapx+(nsmaplx<<4)-(352>>1),smapy+(nsmaply<<4)-(352>>1));
- Picture* PIC1=DSY.addPicture(NULL,0,0,&y352x352,&y352x352,&y352x352);
- TextButton* LoadBtn=DSY.addTextButton(PIC1,352>>1,30,"╟└├╨╙╟╚╥▄ ╚├╨╙",&FActive,&FPassive,&FDisable,1);
- ListBox* LB=DSY.addListBox(PIC1,60,100,6,&r224x28e,&f16x16g,&f16x16w,NULL);
- VScrollBar* VS=DSY.addVScrollBar(PIC1,LB->x-DSY.BaseX+LB->oneLx-1,1+LB->y-DSY.BaseY,1000,4,&sb_up_d,&sb_up_e,&sb_up_p,&sb_dn_d,&sb_dn_e,&sb_dn_p,&sb_vbare,&sb_vbar,&sb_btn);
- LB->VS=VS;
- BpxTextButton* OkBtn=DSY.addBpxTextButton(PIC1,10,315,"OK",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- OkBtn->UserParam=mcmOk;
- OkBtn->OnUserClick=&MMItemChoose;
- BpxTextButton* CancelBtn=DSY.addBpxTextButton(PIC1,180,315,"╬╥╠┼═└",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- CancelBtn->UserParam=mcmCancel;
- CancelBtn->OnUserClick=&MMItemChoose;
- CreateGamesList(LB);
- ItemChoose=-1;
- do{
- DSY.MarkToDraw();
- ProcessMessages();
- if(LB->CurItem==-1)OkBtn->Enabled=false;
- else OkBtn->Enabled=true;
- DSY.ProcessDialogs();
- DSY.RefreshView();
- }while(ItemChoose==-1);
- if(ItemChoose==mcmOk&&LB->CurItem!=-1){
- CmdLoadNetworkGame(MyNation,serials[LB->CurItem],names[LB->CurItem]);
- //LoadGame(fnames[LB->CurItem]);
- ContinueGame=true;
- };
- FreeNames();
- };
- void processMLoadGame(){
- DialogsSystem DSY((RealLx-352)>>1,RealLy-352-80);
- Picture* PIC1=DSY.addPicture(NULL,0,0,&y352x352,&y352x352,&y352x352);
- TextButton* LoadBtn=DSY.addTextButton(PIC1,352>>1,30,"╟└├╨╙╟╚╥▄ ╚├╨╙",&FActive,&FPassive,&FDisable,1);
- ListBox* LB=DSY.addListBox(PIC1,60,100,6,&r224x28e,&f16x16g,&f16x16w,NULL);
- VScrollBar* VS=DSY.addVScrollBar(PIC1,LB->x-DSY.BaseX+LB->oneLx-1,1+LB->y-DSY.BaseY,1000,4,&sb_up_d,&sb_up_e,&sb_up_p,&sb_dn_d,&sb_dn_e,&sb_dn_p,&sb_vbare,&sb_vbar,&sb_btn);
- LB->VS=VS;
- BpxTextButton* OkBtn=DSY.addBpxTextButton(PIC1,10,315,"OK",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- OkBtn->UserParam=mcmOk;
- OkBtn->OnUserClick=&MMItemChoose;
- BpxTextButton* CancelBtn=DSY.addBpxTextButton(PIC1,180,315,"╬╥╠┼═└",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- CancelBtn->UserParam=mcmCancel;
- CancelBtn->OnUserClick=&MMItemChoose;
- CreateGamesList(LB);
- ItemChoose=-1;
- do{
- DSY.MarkToDraw();
- ProcessMessages();
- if(LB->CurItem==-1)OkBtn->Enabled=false;
- else OkBtn->Enabled=true;
- DSY.ProcessDialogs();
- DSY.RefreshView();
- }while(ItemChoose==-1);
- if(ItemChoose==mcmOk&&LB->CurItem!=-1){
- LoadGame(fnames[LB->CurItem]);
- ContinueGame=true;
- ItemChoose=mcmSingle;
- PrepareToGame();
- };
- FreeNames();
- };
- //----------------SAVE GAME--------------//
- void CmdSaveNetworkGame(byte NI,int ID,char* Name);
- bool CheckName(char* str){
- for(int i=0;i<NNames;i++)if(strstr(names[i],str))return false;
- return true;
- };
- bool ChangeNation;
- bool MultiTvar;
- extern int FogMode;
- void EnterChat(){
- char passw[128];
- passw[0]=0;
- ItemChoose=-1;
- DialogsSystem DSY(smapx+(nsmaplx<<4)-(288>>1),smapy+(nsmaply<<4)-(128>>1));
- Picture* PIC1=DSY.addPicture(NULL,0,0,&y288x128,&y288x128,&y288x128);
- TextButton* LoadBtn=DSY.addTextButton(PIC1,288>>1,5,"╧└╨╬╦▄:",&FActive,&FPassive,&FDisable,1);
- InputBox* IB=DSY.addInputBox(PIC1,30,45,passw,20,&r224x28e,&f16x16w,&f16x16g);
- IB->Active=true;
- //BpxTextButton* CancelBtn=DSY.addBpxTextButton(PIC1,120,90,"╬╥╠┼═└",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- //CancelBtn->UserParam=mcmCancel;
- //CancelBtn->OnUserClick=&MMItemChoose;
- BpxTextButton* OkBtn=DSY.addBpxTextButton(PIC1,55,90,"OK",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- OkBtn->UserParam=mcmOk;
- OkBtn->OnUserClick=&MMItemChoose;
- KeyPressed=false;
- do{
- DSY.MarkToDraw();
- ProcessMessages();
- if(KeyPressed&&LastKey==13){
- ItemChoose=mcmOk;
- KeyPressed=false;
- };
- DSY.ProcessDialogs();
- DSY.RefreshView();
- }while(ItemChoose==-1);
- if(ItemChoose==mcmOk){
- if(!strcmp(passw,"IZMENA"))ChangeNation=!ChangeNation;
- if(!strcmp(passw,"MULTITVAR"))MultiTvar=!MultiTvar;
- if(!strcmp(passw,"SUPERVIZOR"))FogMode=!FogMode;
- };
- };
- void SaveGame(char* fnm,char* Messtr,int ID);
- void ProcessGSaveGame(){
- DialogsSystem DSY(smapx+(nsmaplx<<4)-(352>>1),smapy+(nsmaply<<4)-(352>>1));
- Picture* PIC1=DSY.addPicture(NULL,0,0,&y352x352,&y352x352,&y352x352);
- TextButton* LoadBtn=DSY.addTextButton(PIC1,352>>1,30,"╤╬╒╨└═╚╥▄ ╚├╨╙",&FActive,&FPassive,&FDisable,1);
- InputBox* IB=DSY.addInputBox(PIC1,60,75,GameName,20,&r224x28e,&f16x16w,&f16x16g);
- ListBox* LB=DSY.addListBox(PIC1,60,120,6,&r224x28e,&f16x16g,&f16x16w,NULL);
- VScrollBar* VS=DSY.addVScrollBar(PIC1,LB->x-DSY.BaseX+LB->oneLx-1,1+LB->y-DSY.BaseY,1000,4,&sb_up_d,&sb_up_e,&sb_up_p,&sb_dn_d,&sb_dn_e,&sb_dn_p,&sb_vbare,&sb_vbar,&sb_btn);
- LB->VS=VS;
- BpxTextButton* OkBtn=DSY.addBpxTextButton(PIC1,10,315,"OK",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- OkBtn->UserParam=mcmOk;
- OkBtn->OnUserClick=&MMItemChoose;
- BpxTextButton* CancelBtn=DSY.addBpxTextButton(PIC1,180,315,"╬╥╠┼═└",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- CancelBtn->UserParam=mcmCancel;
- CancelBtn->OnUserClick=&MMItemChoose;
- CreateGamesList(LB);
- ItemChoose=-1;
- do{
- DSY.MarkToDraw();
- ProcessMessages();
- if(strlen(IB->Str))OkBtn->Enabled=true;
- else OkBtn->Enabled=false;
- DSY.ProcessDialogs();
- DSY.RefreshView();
- }while(ItemChoose==-1);
- if(ItemChoose=mcmOk){
- CmdSaveNetworkGame(MyNation,GetTickCount(),IB->Str);
- ContinueGame=true;
- /* else{
- for(int j=0;j<NNames;j++){
- if(!strcmp(names[j],IB->Str))goto jhg;
- };
- jhg: if(j<NNames){
- //record already exists
- SaveGame(names[j],IB->Str,0);
- strcpy(GameName,names[j]);
- }else{
- //new record
- //discovery for new name
- char XX[128];
- strcpy(GameName,IB->Str);
- for(j=0;j<9999;j++){
- strcpy(XX,"save");
- itoa(j,&XX[4],10);
- strcat(XX,".sav");
- if(CheckName(XX)){
- SaveGame(XX,GameName,0);
- goto qqwer;
- };
- };
- };
- };*/
- };
- qqwer:
- FreeNames();
- };
- //----------------SAVE MAP--------------//
- void NormalName(char* s){
- if(!strstr(s,".wm")){
- strcat(s,".wm");
- };
- };
- bool LBCLICK(SimpleDialog* SD){
- ListBox* LB=(ListBox*)SD;
- if(LB->CurItem!=-1){
- strcpy(GameName,(LB->GetItem(LB->CurItem))->Message);
- };
- return false;
- };
- void SaveExtendedMap(char* fnm);
- void ProcessGSaveMap(){
- DialogsSystem DSY(smapx+(nsmaplx<<4)-(352>>1),smapy+(nsmaply<<4)-(352>>1));
- Picture* PIC1=DSY.addPicture(NULL,0,0,&y352x352,&y352x352,&y352x352);
- TextButton* LoadBtn=DSY.addTextButton(PIC1,352>>1,30,"╤╬╒╨└═╚╥▄ ╩└╨╥╙",&FActive,&FPassive,&FDisable,1);
- InputBox* IB=DSY.addInputBox(PIC1,60,75,GameName,20,&r224x28e,&f16x16w,&f16x16g);
- ListBox* LB=DSY.addListBox(PIC1,60,120,6,&r224x28e,&f16x16g,&f16x16w,NULL);
- LB->OnUserClick=&LBCLICK;
- VScrollBar* VS=DSY.addVScrollBar(PIC1,LB->x-DSY.BaseX+LB->oneLx-1,1+LB->y-DSY.BaseY,1000,4,&sb_up_d,&sb_up_e,&sb_up_p,&sb_dn_d,&sb_dn_e,&sb_dn_p,&sb_vbare,&sb_vbar,&sb_btn);
- LB->VS=VS;
- BpxTextButton* OkBtn=DSY.addBpxTextButton(PIC1,10,315,"OK",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- OkBtn->UserParam=mcmOk;
- OkBtn->OnUserClick=&MMItemChoose;
- BpxTextButton* CancelBtn=DSY.addBpxTextButton(PIC1,180,315,"╬╥╠┼═└",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- CancelBtn->UserParam=mcmCancel;
- CancelBtn->OnUserClick=&MMItemChoose;
- CreateNewMapsList(LB);
- ItemChoose=-1;
- do{
- ProcessMessages();
- if(strlen(IB->Str))OkBtn->Enabled=true;
- else OkBtn->Enabled=false;
- DSY.ProcessDialogs();
- DSY.RefreshView();
- }while(ItemChoose==-1);
- if(ItemChoose=mcmOk){
- NormalName(GameName);
- SaveExtendedMap(GameName);
- };
- //qqwer:
- //FreeNames();
- };
- //----------------LOAD Map--------------//
- void PreLoadExtendedMap(char* fnm);
- void PostLoadExtendedMap(char* fnm);
- void ProcessGLoadMap(){
- DialogsSystem DSY(smapx+(nsmaplx<<4)-(352>>1),smapy+(nsmaply<<4)-(352>>1));
- Picture* PIC1=DSY.addPicture(NULL,0,0,&y352x352,&y352x352,&y352x352);
- TextButton* LoadBtn=DSY.addTextButton(PIC1,352>>1,30,"╟└├╨╙╟╚╥▄ ╩└╨╥╙",&FActive,&FPassive,&FDisable,1);
- ListBox* LB=DSY.addListBox(PIC1,60,100,6,&r224x28e,&f16x16g,&f16x16w,NULL);
- VScrollBar* VS=DSY.addVScrollBar(PIC1,LB->x-DSY.BaseX+LB->oneLx-1,1+LB->y-DSY.BaseY,1000,4,&sb_up_d,&sb_up_e,&sb_up_p,&sb_dn_d,&sb_dn_e,&sb_dn_p,&sb_vbare,&sb_vbar,&sb_btn);
- LB->VS=VS;
- BpxTextButton* OkBtn=DSY.addBpxTextButton(PIC1,10,315,"OK",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- OkBtn->UserParam=mcmOk;
- OkBtn->OnUserClick=&MMItemChoose;
- BpxTextButton* CancelBtn=DSY.addBpxTextButton(PIC1,180,315,"╬╥╠┼═└",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- CancelBtn->UserParam=mcmCancel;
- CancelBtn->OnUserClick=&MMItemChoose;
- CreateNewMapsList(LB);
- ItemChoose=-1;
- do{
- DSY.MarkToDraw();
- ProcessMessages();
- if(LB->CurItem==-1)OkBtn->Enabled=false;
- else OkBtn->Enabled=true;
- DSY.ProcessDialogs();
- DSY.MarkToDraw();
- DSY.RefreshView();
- }while(ItemChoose==-1);
- if(ItemChoose==mcmOk&&LB->CurItem!=-1){
- UnLoading();
- PreLoadExtendedMap((LB->GetItem(LB->CurItem))->Message);
- MyNation=0;
- for(int i=0;i<8;i++){
- LoadNation("orcs.nds",1<<i,i);
- int xx,yy;
- //chooseCoor(&xx,&yy);
- CITY[i].CreateCity(4,4,i);
- //if(i<NPlayers){
- // coorX[i]=xx;
- // coorY[i]=yy;
- // NATIONS[i].CreateTerrainAt(xx,yy,1);
- //};
- };
- //ItemChoose=mcmSingle;
- //MultiplayerStart=true;
- InitExplosions();
- PostLoadExtendedMap((LB->GetItem(LB->CurItem))->Message);
- CheapMode=false;
- ContinueGame=true;
- for(i=0;i<8;i++){
- RESRC[i][1]=100000000;
- RESRC[i][2]=100000000;
- RESRC[i][3]=100000000;
- };
- };
- //FreeNames();
- };
- //-----------------OPTIONS---------------//
- void ProcessGOptions(){
- };
-
- //---------------------------------------//
- void NewMap(int szX,int szY);
- extern byte mapPos[16];
- void CreateNewMap(int SizeX,int SizeY){
- UnLoading();
- NewMap(SizeX,SizeY);
- MyNation=0;
- for(int i=0;i<8;i++){
- LoadNation("orcs.nds",1<<i,i);
- int xx,yy;
- chooseCoor(&xx,&yy);
- mapPos[i*2]=xx;
- mapPos[i*2+1]=yy;
- CITY[i].CreateCity(xx+4,yy+4,i);
- if(i<NPlayers){
- coorX[i]=xx;
- coorY[i]=yy;
- NATIONS[i].CreateTerrainAt(xx,yy,1);
- if(i==MyNation){
- mapx=xx-(smaplx>>1);
- mapy=yy-(smaply>>1);
- if(mapx<1)mapx=1;
- if(mapy<1)mapy=1;
- if(mapx+smaplx>=msx)mapx=msx-smaplx-1;
- if(mapy+smaply>=msy)mapy=msy-smaply-1;
- };
- };
- };
- ItemChoose=mcmSingle;
- InitExplosions();
- };
- //--------Choose units Dialog------------//
- void ChooseUnit(){
- DialogsSystem DSY(smapx+(nsmaplx<<4)-(352>>1),smapy+(nsmaply<<4)-(352>>1));
- Picture* PIC1=DSY.addPicture(NULL,0,0,&y352x352,&y352x352,&y352x352);
- TextButton* LoadBtn=DSY.addTextButton(PIC1,352>>1,30,"┬█┴╬╨ ╬┴┌┼╩╥└",&FActive,&FPassive,&FDisable,1);
- ListBox* LB=DSY.addListBox(PIC1,60,100,6,&r224x28e,&f16x16g,&f16x16w,NULL);
- VScrollBar* VS=DSY.addVScrollBar(PIC1,LB->x-DSY.BaseX+LB->oneLx-1,1+LB->y-DSY.BaseY,1000,4,&sb_up_d,&sb_up_e,&sb_up_p,&sb_dn_d,&sb_dn_e,&sb_dn_p,&sb_vbare,&sb_vbar,&sb_btn);
- LB->VS=VS;
- BpxTextButton* OkBtn=DSY.addBpxTextButton(PIC1,10,315,"OK",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- OkBtn->UserParam=mcmOk;
- OkBtn->OnUserClick=&MMItemChoose;
- BpxTextButton* CancelBtn=DSY.addBpxTextButton(PIC1,180,315,"╬╥╠┼═└",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- CancelBtn->UserParam=mcmCancel;
- CancelBtn->OnUserClick=&MMItemChoose;
- LB->AddItem("╤≥σφα",4096);
- LB->AddItem("├≡αφ≥",0);
- LB->AddItem("╧Φταφ≥",1);
- LB->AddItem("╩α≥α∩≤δⁿ≥α",2);
- LB->AddItem("╬π≡",3);
- LB->AddItem("╥≡εδδⁿ",4);
- LB->AddItem("╩εδΣ≤φ",5);
- LB->AddItem("├φε∞√",7);
- LB->AddItem("╥αφΩσ≡",9);
- LB->AddItem("╥≡αφ±∩ε≡≥",10);
- LB->AddItem("╠ε≡±ΩεΘ Σⁿ Γεδ",11);
- LB->AddItem("─µαππσ≡φα≤≥",12);
- LB->AddItem("╫σ≡σ∩α⌡α",13);
- LB->AddItem("╨ατΓσΣΩα",14);
- LB->AddItem("─≡αΩεφ",15);
- LB->AddItem("╤Ωσδσ≥",18);
- LB->AddItem("├αΣΩΦΘ Σσ∞εφ",19);
- LB->AddItem("╘σ≡∞α",20);
- LB->AddItem("┴α≡αΩ",21);
- LB->AddItem("═╦╬ δεΩα≥ε≡",22);
- LB->AddItem("╤∞ε≥≡εΓα ßα°φ ",23);
- LB->AddItem("╒α≡≈σΓφ επ≡εΓ",24);
- LB->AddItem("╦αßε≡α≥ε≡Φ αδ⌡Φ∞ΦΩεΓ",25);
- LB->AddItem("├φστΣε Σ≡αΩεφεΓ",26);
- LB->AddItem("┬σ≡⌠ⁿ",27);
- LB->AddItem("╓σφ≥≡ πε≡εΣα",28);
- LB->AddItem("╤δσ±α≡φα ",29);
- LB->AddItem("╦Φ≥σΘφ√Θ ÷σ⌡",30);
- LB->AddItem("═╚╚ ∞απΦΦ",31);
- LB->AddItem("╩≤τφΦ÷α",32);
- LB->AddItem("╬≈Φ±≥. ταΓεΣ",33);
- LB->AddItem("═σ⌠≥ φα ∩δα≥⌠ε≡∞α",34);
- LB->AddItem("╓Φ≥αΣσδⁿ",35);
- LB->AddItem("╩≡σ∩ε±≥ⁿ",36);
- LB->AddItem("╤≥ε≡εµσΓα ßα°φ ",37);
- LB->AddItem("┬εε≡≤µσφφα ßα°φ ",38);
- LB->AddItem("╥σδσ∩ε≡≥",39);
- LB->AddItem("╥α≡σδΩα",40);
- LB->AddItem("╧≡ε≥ΦΓε Σσ≡Ωα",41);
- LB->AddItem("┴σ≡≥α",42);
- LB->AddItem("▀Σσ≡Ωα",43);
- ItemChoose=-1;
- do{
- ProcessMessages();
- if(LB->CurItem==-1)OkBtn->Enabled=false;
- else OkBtn->Enabled=true;
- LB->NeedToDraw=true;
- VS->NeedToDraw=true;
- DSY.ProcessDialogs();
- LB->NeedToDraw=true;
- VS->NeedToDraw=true;
- DSY.RefreshView();
- }while(ItemChoose==-1);
- if(ItemChoose==mcmOk&&LB->CurItem!=-1){
- int choo=(LB->GetItem(LB->CurItem))->Param1;
- if(choo==4096)BuildWall=true;
- else Creator=choo;
- ContinueGame=true;
- };
- };
- //------MAIN MENU IN MAP EDITOR----------//
- int ProcessGMapEditMainMenu(){
- ContinueGame=false;
- DialogsSystem GMM(smapx+(nsmaplx<<4)-(352>>1),smapy+(nsmaply<<4)-(352>>1));
- Picture* PIC1=GMM.addPicture(NULL,0,0,&y352x352,&y352x352,&y352x352);
- TextButton* ExitBtn=GMM.addTextButton(PIC1,352>>1,30,"┬╬╟┬╨└╥ ┬ ╠┼═▐",&FActive,&FPassive,&FDisable,1);
- TextButton* SaveBtn=GMM.addTextButton(PIC1,352>>1,30+40,"╤╬╒╨└═╚╥▄ ╩└╨╥╙",&FActive,&FPassive,&FDisable,1);
- SaveBtn->UserParam=mcmSave;
- SaveBtn->OnUserClick=&MMItemChoose;
- TextButton* LoadBtn=GMM.addTextButton(PIC1,352>>1,30+80,"╟└├╨╙╟╚╥▄ ╩└╨╥╙",&FActive,&FPassive,&FDisable,1);
- LoadBtn->UserParam=mcmLoad;
- LoadBtn->OnUserClick=&MMItemChoose;
- TextButton* NewBtn=GMM.addTextButton(PIC1,352>>1,30+120,"═╬┬└▀ ╩└╨╥└",&FActive,&FPassive,&FDisable,1);
- TextButton* HelpBtn=GMM.addTextButton(PIC1,352>>1,30+160,"╧╬╠╬┘▄",&FActive,&FPassive,&FDisable,1);
- ExitBtn->UserParam=mcmExit;
- ExitBtn->OnUserClick=&MMItemChoose;
- BpxTextButton* ResumeBtn=
- GMM.addBpxTextButton(PIC1,(352-164)>>1,300,"╧╨╬─╬╦╞╚╥▄",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- ResumeBtn->UserParam=mcmResume;
- ResumeBtn->OnUserClick=&MMItemChoose;
- stg:
- ItemChoose=-1;
- do{
- ProcessMessages();
- GMM.ProcessDialogs();
- GMM.RefreshView();
- }while(ItemChoose==-1);
- if(ItemChoose==mcmLoad){
- ProcessGLoadMap();
- GMM.MarkToDraw();
- if(!ContinueGame)goto stg;
- };
- if(ItemChoose==mcmSave){
- ProcessGSaveMap();
- GMM.MarkToDraw();
- if(!ContinueGame)goto stg;
- };
- return ItemChoose;
- };
- //----------MAIN MENU IN GAME------------//
- int ProcessGMainMenu(){
- ContinueGame=false;
- GameMode=2;
- bool MIMOD=MiniMode;
- int mmmx=mapx;
- int mmmy=mapy;
- ClearMiniMode();
- DialogsSystem GMM(smapx+(nsmaplx<<4)-(352>>1),smapy+(nsmaply<<4)-(352>>1));
- Picture* PIC1=GMM.addPicture(NULL,0,0,&y352x352,&y352x352,&y352x352);
- TextButton* ExitBtn=GMM.addTextButton(PIC1,352>>1,30,"╧╨┼╨┬└╥▄ ╚├╨╙",&FActive,&FPassive,&FDisable,1);
- ExitBtn->UserParam=mcmExit;
- ExitBtn->OnUserClick=&MMItemChoose;
- TextButton* SaveBtn=GMM.addTextButton(PIC1,352>>1,30+40,"╤╬╒╨└═╚╥▄ ╚├╨╙",&FActive,&FPassive,&FDisable,1);
- SaveBtn->UserParam=mcmSave;
- SaveBtn->OnUserClick=&MMItemChoose;
- TextButton* LoadBtn=GMM.addTextButton(PIC1,352>>1,30+80,"╟└├╨╙╟╚╥▄ ╚├╨╙",&FActive,&FPassive,&FDisable,1);
- LoadBtn->UserParam=mcmLoad;
- LoadBtn->OnUserClick=&MMItemChoose;
- TextButton* OptionsBtn=GMM.addTextButton(PIC1,352>>1,30+120,"╧└╨└╠┼╥╨█",&FActive,&FPassive,&FDisable,1);
- OptionsBtn->UserParam=mcmOptions;
- OptionsBtn->OnUserClick=&MMItemChoose;
- TextButton* HelpBtn=GMM.addTextButton(PIC1,352>>1,30+160,"╧╬╠╬┘▄",&FActive,&FPassive,&FDisable,1);
- HelpBtn->UserParam=mcmHelp;
- HelpBtn->OnUserClick=&MMItemChoose;
- BpxTextButton* ResumeBtn=
- GMM.addBpxTextButton(PIC1,(352-164)>>1,300,"╧╨╬─╬╦╞╚╥▄",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- ResumeBtn->UserParam=mcmResume;
- ResumeBtn->OnUserClick=&MMItemChoose;
- stg:
- ItemChoose=-1;
- do{
- ProcessMessages();
- GMM.ProcessDialogs();
- GMM.RefreshView();
- }while(ItemChoose==-1);
- if(ItemChoose==mcmLoad){
- ProcessGLoadGame();
- GMM.MarkToDraw();
- if(!ContinueGame)goto stg;
- };
- if(ItemChoose==mcmSave){
- ProcessGSaveGame();
- GMM.MarkToDraw();
- if(!ContinueGame)goto stg;
- };
- if(ItemChoose==mcmOptions){
- ProcessOptions(smapx+(nsmaplx<<4)-(288>>1),smapy+(nsmaply<<4)-(288>>1));
- ContinueGame=true;
- ItemChoose=mcmResume;
- };
- if(ItemChoose==mcmHelp){
- ProcessHelp();
- };
- if(MIMOD)SetMiniMode();
- mapx=mmmx;
- mapy=mmmy;
- GameMode=0;
- return ItemChoose;
- };
- //---------------------------------------//
- extern int HintX;
- extern int HintY;
- void GSSetup800(){
- CBar(0,0,SCRSizeX,SCRSizeY,0);
- int PanelLx=160;
- int P1Ly=160;
- int P2Ly=160;//2
- int P3Ly=256;//3
- IconLx=48;
- IconLy=40;
- MiniMode=false;
- Shifter=5;
- Multip=0;
- smapx=PanelLx;
- smapy=0;
- smaplx=(RealLx-PanelLx)>>5;
- smaply=RSCRSizeY>>5;
- nsmaplx=smaplx;
- nsmaply=smaply;
- HintX=smapx+4;
- HintY=smapy+(smaply<<5)-30;
- minix=(PanelLx-(msx>>1))>>1;
- miniy=(P1Ly-(msy>>1))>>1;
- PrpNx=div(PanelLx,IconLx).quot;
- PrpNy=div(P2Ly,IconLy).quot;
- PrpX=(PanelLx-IconLx*PrpNx)>>1;
- PrpY=P1Ly+((P2Ly-IconLy*PrpNy)>>1);
- AblNx=PrpNx;
- AblNy=div(P3Ly,IconLy).quot;
- AblX=PrpX;
- AblY=P1Ly+P2Ly+((P3Ly-AblNy*IconLy)>>1);
- GSYS.~DialogsSystem();
- GVPort=GSYS.addViewPort(smapx,smapy,smaplx<<5,smaply<<5);
- Pan1=GSYS.addPicture(NULL,0,0,&w160x160,&w160x160,&w160x160);
- Pan2=GSYS.addPicture(NULL,0,P1Ly,&w160x160,&w160x160,&w160x160);
- Pan3=GSYS.addPicture(NULL,0,P1Ly+P2Ly,&w160x256,&w160x256,&w160x256);
- //Pan2=GSYS.addPicture(NULL,0,P1Ly,&w160x256,&w160x256,&w160x256);
- //Pan3=GSYS.addPicture(NULL,0,P1Ly+P2Ly,&w160x160,&w160x160,&w160x160);
- MiniVPort=GSYS.addViewPort(minix,miniy,msx>>1,msy>>1);
- AblVPort=GSYS.addViewPort(AblX,AblY,AblNx*IconLx,AblNy*IconLy);
- PrpVPort=GSYS.addViewPort(PrpX,PrpY,PrpNx*IconLx,PrpNy*IconLy);
- //Pan4=GSYS.addColoredBar(0,P1Ly+P2Ly+P3Ly,PanelLx,(RSCRSizeY&(1023-31))-P1Ly-P1Ly-P3Ly,0);
- //if((smaply<<5)<RSCRSizeY)
- // Pan5=GSYS.addColoredBar(PanelLx,smaply<<5,
- // RSCRSizeX-PanelLx,RSCRSizeY&31,0);
- //else Pan5=NULL;
- LoadPalette("darkw.pal");
- };
- void GFieldShow();
- void GMiniShow();
- void CopyToScreen(int x,int y,int Lx,int Ly);
- void DrawAllScreen(){
- //COUNTER++;
- GFieldShow();
- Pan1->OnDraw(Pan1);
- GMiniShow();
- Pan2->OnDraw(Pan2);
- ShowProp();
- Pan3->OnDraw(Pan3);
- ShowAbility();
- //Pan4->OnDraw(Pan4);
- if(Pan5)Pan5->OnDraw(Pan5);
- CopyToScreen(0,0,RealLx,RSCRSizeY);
- HandleMouse(mouseX,mouseY);
- MFix();
- };
- void FastScreenProcess(){
- // SERROR2();
- GFieldShow();
- ProcessMessages();
- GMiniShow();
- Pan2->OnDraw(Pan2);
- Pan3->OnDraw(Pan3);
- ShowProp();
- ShowAbility();
- Pan1->NeedToDraw=false;
- GSYS.ProcessDialogs();
- Pan1->NeedToDraw=false;
- Pan2->NeedToDraw=false;
- Pan3->NeedToDraw=false;
- GVPort->NeedToDraw=true;
- MiniVPort->NeedToDraw=true;
- AblVPort->NeedToDraw=true;
- PrpVPort->NeedToDraw=true;
- HandleMouse(mouseX,mouseY);
- MFix();
- // SERROR2();
- int time0=GetTickCount();
- GSYS.RefreshView();
- time8=GetTickCount()-time0;
- // SERROR1();
- };
- void HandleAntiNuc();
- void PreDrawGameProcess();
- void PostDrawGameProcess();
- void IAmLeft();
- void PlayGame(){
- GSSetup800();
- InitGame();
- DrawAllScreen();
- GameNeedToDraw=false;
- GameExit=false;
- MakeMenu=false;
- InGame=true;
- do{
- time1=GetTickCount();
- ProcessMessages();
- time2=GetTickCount()-time1;
- if(bActive){
- GameMode=0;
- PreDrawGameProcess();
- time3=GetTickCount()-time1-time2;
- ProcessMessages();
- if(GameNeedToDraw){
- //COUNTER++;
- DrawAllScreen();
- GameNeedToDraw=false;
- }else FastScreenProcess();
- time4=GetTickCount()-time1-time2-time3;
- //DrawAllScreen();
- //DrawAllScreen();
- ProcessMessages();
- PostDrawGameProcess();
- time5=GetTickCount()-time1-time2-time3-time4;
- if(MakeMenu){
- switch(MenuType){
- case 1: if(ProcessGMainMenu()==mcmExit){
- GameExit=true;
- ShutdownMultiplayer();
- //IAmLeft();
- };
- break;
- case 2: ChooseUnit();
- break;
- case 3: EnterChat();
- break;
- case 4: ProcessHelp();
- break;
- };
- MakeMenu=false;
- };
- }else GameNeedToDraw=true;
- }while(!GameExit);
- };
- void DrawAllEditScreen(){
- GFieldShow();
- Pan1->OnDraw(Pan1);
- GMiniShow();
- Pan2->OnDraw(Pan2);
- ShowProp();
- Pan3->OnDraw(Pan3);
- ShowAbility();
- //Pan4->OnDraw(Pan4);
- if(Pan5)Pan5->OnDraw(Pan5);
- CopyToScreen(0,0,RealLx,RSCRSizeY);
- };
- void FastEditScreenProcess(){
- GFieldShow();
- ProcessMessages();
- GMiniShow();
- Pan2->OnDraw(Pan2);
- Pan3->OnDraw(Pan3);
- ShowProp();
- ShowAbility();
- Pan1->NeedToDraw=false;
- GSYS.ProcessDialogs();
- Pan1->NeedToDraw=false;
- Pan2->NeedToDraw=false;
- Pan3->NeedToDraw=false;
- GVPort->NeedToDraw=true;
- MiniVPort->NeedToDraw=true;
- AblVPort->NeedToDraw=true;
- PrpVPort->NeedToDraw=true;
- HandleMouse(mouseX,mouseY);
- MFix();
- GSYS.RefreshView();
- };
- void EditGame(){
- GSSetup800();
- DrawAllEditScreen();
- GameNeedToDraw=false;
- GameExit=false;
- MakeMenu=false;
- do{
- ProcessMessages();
- if(bActive){
- //SERROR2();
- PreDrawGameProcess();
- //SERROR1();
- ProcessMessages();
- if(GameNeedToDraw){
- DrawAllScreen();
- GameNeedToDraw=false;
- }else FastScreenProcess();
- //DrawAllScreen();
- //SERROR();
- ProcessMessages();
- PostDrawGameProcess();
- if(MakeMenu){
- switch(MenuType){
- case 1: if(ProcessGMapEditMainMenu()==mcmExit)GameExit=true;
- break;
- case 2: ChooseUnit();
- break;
- case 3: ProcessResEdit();
- break;
- };
- MakeMenu=false;
- };
- }else GameNeedToDraw=true;
- }while(!GameExit);
- };
- //--------------ALL GAME IS IN THIS PROCEDURE!-------------//
- void AllGame(){
- stgame:
- int mret=processMainMenu();
- if(mret==mcmExit)return;
- if(mret==mcmSingle){
- if(EditMapMode)EditGame();
- else PlayGame();
- goto stgame;
- }else goto stgame;
- };
- extern int PLNAT[8];
- void PrepareGameMedia(byte myid){
- rpos=0;
- setCoor();
- UnLoading();
- PreLoadExtendedMap(CurrentMap);
- memcpy(&RESRC[0][0],&RES[0][0],sizeof RES);
- MyNation=0;
- for(int i=0;i<8;i++){
- if(!PLNAT[i])
- LoadNation("orcs.nds",1<<i,i);
- else LoadNation("PEOPLES.nds",1<<i,i);
- MyNation=myid;
- int xx,yy;
- xx=mapPos[i*2];
- yy=mapPos[i*2+1];
- //chooseCoor(&xx,&yy);
- CITY[i].CreateCity(xx+4,yy+4,i);
- if(i<NPlayers){
- //coorX[i]=xx;
- //coorY[i]=yy;
- NATIONS[i].CreateTerrainAt(xx+5,yy+5,1);
- if(i==MyNation){
- mapx=xx-(smaplx>>1);
- mapy=yy-(smaply>>1);
- if(mapx<1)mapx=1;
- if(mapy<1)mapy=1;
- if(mapx+smaplx>=msx)mapx=msx-smaplx-1;
- if(mapy+smaply>=msy)mapy=msy-smaply-1;
- };
- };
- };
- PostLoadExtendedMap(CurrentMap);
- CheapMode=false;
- ItemChoose=mcmSingle;
- MultiplayerStart=true;
- InitExplosions();
- PrepareToGame();
- InitGame();
- };
- void PrepareEditMedia(byte myid){
- rpos=0;
- setCoor();
- UnLoading();
- NewMap(240,240);
- MyNation=0;
- for(int i=0;i<8;i++){
- if(!PLNAT[i])
- LoadNation("orcs.nds",1<<i,i);
- else LoadNation("PEOPLES.nds",1<<i,i);
- MyNation=myid;
- int xx,yy;
- chooseCoor(&xx,&yy);
- CITY[i].CreateCity(xx+4,yy+4,i);
- if(i<NPlayers){
- coorX[i]=xx;
- coorY[i]=yy;
- NATIONS[i].CreateTerrainAt(xx,yy,1);
- if(i==MyNation){
- mapx=xx-(smaplx>>1);
- mapy=yy-(smaply>>1);
- if(mapx<1)mapx=1;
- if(mapy<1)mapy=1;
- if(mapx+smaplx>=msx)mapx=msx-smaplx-1;
- if(mapy+smaply>=msy)mapy=msy-smaply-1;
- };
- };
- };
- ItemChoose=mcmSingle;
- //MultiplayerStart=true;
- InitExplosions();
- PrepareToEdit();
- ItemChoose=mcmSingle;
- InitGame();
- };
- void RedrawGameBackground(){
- if(GameMode==1){//main menu
- int mmlx=MainMenuGround.PicPtr[0];
- int mmly=MainMenuGround.PicPtr[1];
- MainMenuGround.Draw((RealLx-mmlx)>>1,(RSCRSizeY-mmly)>>1);
- FlipPages();
- }else{
- DrawAllScreen();
- };
- };
- void ProcessHelp(){
- ItemChoose=-1;
- DialogsSystem GMM(smapx+(nsmaplx<<4)-(352>>1),smapy+(nsmaply<<4)-(352>>1));
- Picture* PIC1=GMM.addPicture(NULL,0,0,&y352x352,&y352x352,&y352x352);
- BpxTextButton* OkBtn=GMM.addBpxTextButton(PIC1,352>>1,320,"O≥∞σφα",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- OkBtn->UserParam=mcmOk;
- OkBtn->OnUserClick=&MMItemChoose;
- TextViewer* TV=GMM.addTextViewer(PIC1,20,20,320,320,"help.txt",&f16x16w);
- do{
- ProcessMessages();
- if(KeyPressed&&(LastKey==13||LastKey==27)){
- KeyPressed=false;
- ItemChoose=mcmOk;
- };
- GMM.MarkToDraw();
- GMM.ProcessDialogs();
- GMM.RefreshView();
- }while(ItemChoose==-1);
- ContinueGame=true;
- };
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- void xMainMenu(){
- DialogsSystem MMenu((RSCRSizeX-PanelLx)>>1,RSCRSizeY-PanelLy-80);
- Picture* PIC=MMenu.addPicture(NULL,0,0,&Panel1,&Panel1,&Panel1);
- //MMenu.addBpxTextButton(PanelLx>>1,30,"╬ΣΦφε≈φα Φπ≡α",&FActive,&FPassive,&FDisable,&r164x28p,&r164x28e,&w164x28d);
- //MMenu.addBpxTextButton(PanelLx>>1,60,"╚π≡α ∩ε ±σ≥Φ",&FActive,&FPassive,&FDisable,&r164x28p,&r164x28e,&w164x28d);
- //MMenu.addBpxTextButton(PanelLx>>1,90,"┬ΦΣσε",&FActive,&FPassive,&FDisable,&r164x28p,&r164x28e,&w164x28d);
- BpxTextButton* ExitBtn=MMenu.addBpxTextButton(PIC,60,220,"┬█╒╬─",&f16x16g,&f16x16y,&f16x16y,&r164x28p,&r164x28e,&w164x28d);
- MMenu.addTextButton(PIC,PanelLx>>1,30,"╬ΣΦφε≈φα Φπ≡α",&FActive,&FPassive,&FDisable,1);
- MMenu.addTextButton(PIC,PanelLx>>1,70,"╚π≡α ∩ε ±σ≥Φ",&FActive,&FPassive,&FDisable,1);
- MMenu.addTextButton(PIC,PanelLx>>1,110,"┬ΦΣσε",&FActive,&FPassive,&FDisable,1);
- //TextButton* ExitBtn=MMenu.addTextButton(PanelLx>>1,150,"┬√⌡εΣ",&FActive,&FPassive,&FDisable,1);
-
- MMenu.addHScrollBar(PIC,80,10,10,4,&sb_lf_d,&sb_lf_e,&sb_lf_p,&sb_ri_d,&sb_ri_e,&sb_ri_p,&sb_hbare,&sb_hbar,&sb_btn);
- ListBox* LB=MMenu.addListBox(PIC,200,100,6,&r224x28e,&f16x16g,&f16x16w,NULL);
- VScrollBar* VS=MMenu.addVScrollBar(PIC,LB->x-MMenu.BaseX+LB->oneLx-1,1+LB->y-MMenu.BaseY,1000,4,&sb_up_d,&sb_up_e,&sb_up_p,&sb_dn_d,&sb_dn_e,&sb_dn_p,&sb_vbare,&sb_vbar,&sb_btn);
- LB->VS=VS;
- char uuu[128];
- char uuu1[128];
- uuu[0]=0;
- MMenu.addInputBox(PIC,5,-65,uuu,20,&r224x28e,&f16x16w,&f16x16g);
- MMenu.addInputBox(PIC,5,-195,uuu1,20,&r224x28e,&f16x16w,&f16x16g);
- MMenu.addCheckBox(PIC,-100,0," Item1",1,1,&chk2_on,&chk2_off,&f16x16w,&f16x16g);
- MMenu.addCheckBox(PIC,-100,30," Item2",1,0,&chk2_on,&chk2_off,&f16x16w,&f16x16g);
- MMenu.addCheckBox(PIC,-100,60," Item3",1,0,&chk2_on,&chk2_off,&f16x16w,&f16x16g);
- MMenu.addCheckBox(PIC,-100,90," Item4",1,0,&chk2_on,&chk2_off,&f16x16w,&f16x16g);
-
- MMenu.addCheckBox(PIC,-200,0," Item1",2,1,&chk2_on,&chk2_off,&f16x16w,&f16x16g);
- MMenu.addCheckBox(PIC,-200,30," Item2",2,0,&chk2_on,&chk2_off,&f16x16w,&f16x16g);
- MMenu.addCheckBox(PIC,-200,60," Item3",2,0,&chk2_on,&chk2_off,&f16x16w,&f16x16g);
- MMenu.addCheckBox(PIC,-200,90," Item4",2,0,&chk2_on,&chk2_off,&f16x16w,&f16x16g);
-
- MMenu.addCheckBox(PIC,-100,200," xItem1",0,1,&chk1_on,&chk1_off,&f16x16w,&f16x16g);
- MMenu.addCheckBox(PIC,-100,230," xItem2",0,1,&chk1_on,&chk1_off,&f16x16w,&f16x16g);
- MMenu.addCheckBox(PIC,-100,260," xItem3",0,1,&chk1_on,&chk1_off,&f16x16w,&f16x16g);
- MMenu.addCheckBox(PIC,-100,290," xItem4",0,1,&chk1_on,&chk1_off,&f16x16w,&f16x16g);
- LB->AddItem("save1",0);
- LB->AddItem("save2",1);
- LB->AddItem("save3",0);
- LB->AddItem("save4",1);
- LB->AddItem("save5",0);
- LB->AddItem("save6",1);
- LB->AddItem("save7",0);
- LB->AddItem("save8",1);
- LB->AddItem("save9",0);
- LB->AddItem("save10",1);
- LB->AddItem("save11",0);
- LB->AddItem("save12",1);
- LB->AddItem("save13",0);
- LB->AddItem("save14",1);
- //ExitBtn->OnClick=&OnExit;
- LoadPalette("015w.pal");
- MainMenuGround.Draw(0,0);
- FlipPages();
- do{
- //MainMenuGround.Draw(0,0);
- ProcessMessages();
- MMenu.ProcessDialogs();
- //ShowMPtr();
- //if(DDDebug)FlipPages();
- MMenu.RefreshView();
- for(int uu=0;uu<1000000;uu++)ProcessMessages();
- //FlipPages();
-
- }while(true);
- };